[英]Delete rectangle on TBitmap in Delphi XE
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程序中所做的一样
您无法从光栅图像中删除内容。 每个像素必须有一个值。 您所能做的就是在已有的东西之上绘制其他东西。
因此,如果要还原以前的内容,则必须记住它的内容,然后重新绘制。
绘图程序维护图层,并将这些图层合并为单个图像以进行渲染。 您也可以这样做,但是您必须自己制作多个位图,每个位图一个。
如果要绘制选择矩形,则不需要在基础位图上绘制。 当需要绘制时,可以将位图绘制到屏幕上,然后在顶部绘制矩形。 这样,您就不会让选择矩形破坏实际的图像。
我假设您想绘制一个通常受鼠标移动约束的选择矩形 ,从而删除先前绘制的矩形,并在当前鼠标位置绘制一个新的矩形。 这可以通过在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;
简单的方法是使用TShape
进行选择,完成选择TShape
其隐藏并绘制形状
此TShape的坐标。
如果您将Delphi XE与FireMonkey结合使用 ,则无需关心,只需使用TSelection组件即可显示区域,修改区域并从该区域获取信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.