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程序中一样
答案 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 组件即可你要显示一个地区,修改并从该地区获取信息......