2014年2月1日 星期六

旋轉BMP圖片, Rotate BMP clockwise by 90° by Delphi

視窗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;

沒有留言:

張貼留言