在Delphi XE中删除TBitmap上的矩形

时间:2013-04-04 18:01:36

标签: delphi delphi-xe3

  bmp := TBitmap.Create;
  bmp.SetSize(Screen.Width,Screen.Height);

  bmp.canvas.Brush.Style := bsClear; 
  bmp.Canvas.Pen.Color := clLime;
  bmp.Canvas.Rectangle(startPos.X,startPos.Y,stopPos.X,stopPos.Y); <-draw rectangle

有没有一种简单的方法可以删除旧矩形而不刷新整个图像?

我想选择此图片的某个区域,就像在grafic程序中一样

4 个答案:

答案 0 :(得分:0)

您无法从光栅图像中删除内容。每个像素必须有一个值。你所能做的就是在已有的东西上画出别的东西。

因此,如果您想要恢复之前的内容,您必须记住它是什么,并再次绘制它。

绘图程序维护图层,并将这些图层合并为单个图像以进行渲染。你也可以这样做,但你必须自己使用多个位图,每层一个。

如果要绘制选择矩形,则无需在基础位图上绘制。当您需要绘制时,将位图绘制到屏幕上,然后将矩形绘制在顶部。这样你就不会让选择矩形破坏实际图像。

答案 1 :(得分:0)

我假设您要绘制一个选择矩形,它通常受鼠标移动限制,因此删除先前绘制的矩形并在当前鼠标位置绘制一个新矩形。这可以通过使用笔在XOR模式下绘图来完成:

function NegativeColor(AColor: TColor): TColor;
begin
  Result := RGB(255 - GetRValue(AColor), 255 - GetGValue(AColor),
    255 - GetBValue(AColor));
end;

procedure TForm1.Button14Click(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.SetSize(100, 100);
    Bmp.Canvas.Brush.Style := bsClear;
    Bmp.Canvas.Pen.Color := NegativeColor(clLime);
    Bmp.Canvas.Pen.Mode := pmXor;
    Bmp.Canvas.Rectangle(10, 10, 50, 50);
    Canvas.Draw(0, 0, Bmp);
    Bmp.Canvas.Rectangle(10, 10, 50, 50); // "Erase" previous rectangle
    Bmp.Canvas.Rectangle(10, 10, 90, 90); // Draw new rectangle
    Canvas.Draw(0, 100, Bmp);
  finally
    Bmp.Free;
  end;
end;

答案 2 :(得分:0)

简单的方法是使用TShape进行选择,完成后选择隐藏它并通过
绘制形状 这个TShape的坐标。

答案 3 :(得分:0)

如果您将 Delphi XE FireMonkey 一起使用,则无需关心它,只需使用允许的 TSelection 组件即可你要显示一个地区,修改并从该地区获取信息......