先给你一段旋转90度的代码看一下,旋转任意角度的我就不在这里提供了。
Form1上面有一个image1控件,BitBtn1控件,双击BitBtn1添加以下代码:
procedure TForm1.BitBtn1Click(Sender: TObject);
var //C : TColor;
i, j : integer;
W, H : Word;
Bitmp : TBitmap;
SBuffer : pointer;
DBuffer : pointer;
Ps, PD : Pointer;
Pt : int64;
begin
Bitmp := TBitmap.Create;
Bitmp.PixelFormat := pf24bit;
Bitmp.Width := Image1.Picture.Width;
Bitmp.Height := Image1.Picture.Height;
Bitmp.Canvas.Draw(0,0,Image1.Picture.Graphic);
Getmem(SBuffer, Bitmp.Width * Bitmp.Height * 3);
Getmem(DBuffer, Bitmp.Width * Bitmp.Height * 3);
W := Bitmp.Width;
H := Bitmp.Height;
GetBitmapBits(Bitmp.Handle, W * H * 3, SBuffer);
Pd := DBuffer;
for i := 0 to W - 1 do
begin
Pt := int64(SBuffer) + i * 3 ;
for j := 0 to H - 1 do
begin
Ps := Pointer(Pt + (H - 1 - j)* W * 3);
CopyMemory(Pd, Ps, 3);
Pd := Pointer(int64(Pd) + 3);
end;
end;
Bitmp.Width := H;
Bitmp.Height := W;
SetBitmapBits(Bitmp.Handle, W * H * 3, DBuffer );
Image1.Picture.Assign(Bitmp);
freemem(SBuffer);
freemem(DBuffer);
Bitmp.Free;
end;