Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Image. (Rotate)   Найти похожие ветки 

 
Artur   (2003-11-15 18:33) [0]

Здравствуйте мастаки, подскажите пожалуйста как осуществить переворот просматриваемой картинки (Rotate) в Image. Может кто процедуру знает ?
Спасибо.


 
MBo ©   (2003-11-15 18:38) [1]

На какой угол?
Если именно переворот - TCanvas.StretchDraw или StretchBlt c отрицательной высотой


 
miek ©   (2003-11-15 21:03) [2]

В KOL есть процедуры для поворота на 90 градусов


 
Artur   (2003-11-16 08:48) [3]

На повророт 90; 180;


 
MBo ©   (2003-11-16 10:53) [4]

90: NewPixel[i,j]:=oldpixel[j,i]
180: NewPixel[i,j]:=oldpixel[width-i,height-j]


 
Fenik ©   (2003-11-16 11:05) [5]

procedure RotateBitmap(Bitmap: TBitmap; Angle: Integer; BackColor: TColor);
type TRGB = record
      B, G, R: Byte;
    end;
    pRGB = ^TRGB;
    pByteArray = ^TByteArray;
    TByteArray = array[0..32767] of Byte;
var x, y, W, H, v1, v2: Integer;
   Dest, Src: pRGB;
   VertArray: array of pByteArray;
   Bmp: TBitmap;
begin
 Bitmap.PixelFormat := pf24Bit;
 Bmp := TBitmap.Create;
 try
   Bmp.Assign(Bitmap);
   W := Bitmap.Width - 1;
   H := Bitmap.Height - 1;
   case Angle of
     90, 270: begin
       Bitmap.Width := H + 1;
       Bitmap.Height := W + 1;
       SetLength(VertArray, H + 1);
       v1 := 0;
       v2 := 0;
       if Angle = 90.0 then v1 := H
                       else v2 := W;
       for y := 0 to H do VertArray[y] := Bmp.ScanLine[Abs(v1 - y)];
       for x := 0 to W do begin
         Dest := Bitmap.ScanLine[x];
         for y := 0 to H do begin
           v1 := Abs(v2 - x)*3;
           with Dest^ do begin
             B := VertArray[y, v1];
             G := VertArray[y, v1+1];
             R := VertArray[y, v1+2];
           end;
           Inc(Dest);
         end;
       end
     end;
     180: begin
       for y := 0 to H do begin
         Dest := Bitmap.ScanLine[y];
         Src := Bmp.ScanLine[H - y];
         Inc(Src, W);
         for x := 0 to W do begin
           Dest^ := Src^;
           Dec(Src);
           Inc(Dest);
         end;
       end;
     end;
   end;
 finally
   Bmp.Free;
 end;
end;


 
Fenik ©   (2003-11-16 12:04) [6]

procedure RotateBitmap(Bitmap: TBitmap; Angle: Integer; BackColor: TColor);

Точнее так

procedure RotateBitmap(Bitmap: TBitmap; Angle: Integer);

То было от старой процедуры.


 
Artur   (2003-11-18 12:36) [7]

А можно рабатать только с bmp форматом?


 
Fenik ©   (2003-11-22 11:48) [8]

Да.



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.055 c
14-1077780780
d10
2004-02-26 10:33
2004.03.28
Математика v0.5, полезная прога для студентов


1-1078556683
able
2004-03-06 10:04
2004.03.28
Как сделать нумерацию строк в TRichEdit?


6-1073640341
Filat
2004-01-09 12:25
2004.03.28
Что ещё надо добавить, что отправить письмо ?


3-1077362396
YurikGl
2004-02-21 14:19
2004.03.28
Запрос на DataSet


3-1077861338
Yad
2004-02-27 08:55
2004.03.28
Системное время сервера