視窗XP或以上系統,不需用Scanline或像素處理程式,用一個SetWorldTransform指令,
轉換次元,就很易和快速完成旋轉了,請參考 MSHelp 內的例子。
源碼如下:
procedure TForm1.RotateBMP(ABMP:TBitmap); //clockwise 90°
var
XForm: tagXFORM;
DBMP:TBitmap;
begin
XForm.eM11 := 0;
XForm.eM12 := 1;
XForm.eM21 := -1;
XForm.eM22 := 0;
XForm.eDx := ABMP.Height;
XForm.eDy := 0;
DBMP:=TBitmap.Create;
try
DBMP.Width:=ABMP.Height;
DBMP.Height:=ABMP.Width;
DBMP.PixelFormat:=ABMP.PixelFormat;
SetGraphicsMode(DBMP.Canvas.Handle, GM_ADVANCED);
SetWorldTransform(DBMP.Canvas.Handle, XForm);
BitBlt(DBMP.Canvas.Handle, 0, 0, ABMP.Width, ABMP.Height,
ABMP.Canvas.Handle, 0, 0, SRCCOPY);
ABMP.Assign(DBMP);
finally
DBMP.Free;
end;
end;
沒有留言:
張貼留言