Главная страница
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.053 c
3-1077137009
Денисыч
2004-02-18 23:43
2004.03.28
Как получить текущее значение в DBGrid


1-1078389952
Calm
2004-03-04 11:45
2004.03.28
Как построить график в реальном времени по данным с COM-порта?


7-1073780864
@ndrey
2004-01-11 03:27
2004.03.28
Люди!!!! Что мне делать ХР неопределяет дисковод!!!!!


14-1078144274
Andersen
2004-03-01 15:31
2004.03.28
Кто в кошку от кота отличить сможет?


1-1078890444
vintik
2004-03-10 06:47
2004.03.28
Вопрос по настройкам