如果我想移动/移动位图的像素我该怎么办?
procedure MovePixels(Bitmap: TBitmap; Horizontal, Vertical: Integer);
begin
{ move the Bitmap pixels to new position }
end;
示例:
通过调用 MovePixels(Image1.Picture.Bitmap, 20, 20)
例如输出如下:
指定/更改移动像素后剩余画布的颜色也很有用。所以在这个例子中,灰色/棕色可能是蓝色等。
我注意到有Bitmap.Canvas.Pixels
和Bitmap.Canvas.MoveTo
属性,这是我需要做的吗?
我真的不知道,我打赌这很简单..
答案 0 :(得分:11)
您无法轻松移动像素,但您可以制作副本。
var
Source, Dest: TRect;
....
Source := Rect(0, 0, Bitmap.Width, Bitmap.Height);
Dest := Source;
Dest.Offset(X, Y);
Bitmap.Canvas.CopyRect(Dest, Bitmap.Canvas, Source);
剩下的就是用您选择的颜色填充空间,我确信您可以通过拨打FillRect
来轻松完成。
但是,我认为不这样做就更容易了。相反,我会创建一个新的位图。也许是这样的:
function CreateMovedImage(Bitmap: TBitmap; X, Y: Integer; BackColor: TColor): TBitmap;
var
Source, Dest: TRect;
begin
Source := Rect(0, 0, Bitmap.Width, Bitmap.Height);
Dest := Source;
Dest.Offset(X, Y);
Result := TBitmap.Create;
Try
Result.SetSize(Bitmap.Width, Bitmap.Height);
Result.Canvas.Brush.Style := bsSolid;
Result.Canvas.Brush.Color := BackColor;
Result.Canvas.FillRect(Source);
Result.Canvas.CopyRect(Dest, Bitmap.Canvas, Source);
Except
Result.Free;
raise;
End;
end;