Главная страница
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.03 c
1-1078474460
stainer
2004-03-05 11:14
2004.03.28
меню в стиле offce xp


14-1077785755
Андрей Сенченко
2004-02-26 11:55
2004.03.28
Перекрытие штатной функции ( процедуры )


1-1078821828
Dima_________
2004-03-09 11:43
2004.03.28
Работа с Word


7-1072511631
Evgeniy_K
2003-12-27 10:53
2004.03.28
Заголовок активного окна


1-1078152685
t_vic
2004-03-01 17:51
2004.03.28
Длинные записи в ComboBox