4

如果我想移动/移动位图的像素,我该怎么做?

procedure MovePixels(Bitmap: TBitmap; Horizontal, Vertical: Integer);
begin
  { move the Bitmap pixels to new position }
end;

例子:

在此处输入图像描述

例如,通过调用 MovePixels(Image1.Picture.Bitmap, 20, 20) 将输出如下:

在此处输入图像描述

还可以指定/更改移动像素后留下的画布颜色。所以在这个例子中,灰色/棕色可能是蓝色等。

我注意到有Bitmap.Canvas.PixelsBitmap.Canvas.MoveTo属性,这是我需要做的吗?

我真的不知道,我敢打赌它是如此简单..

4

1 回答 1

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;
于 2012-05-08T13:06:18.243 回答