我假設你想畫一個選擇矩形通常由鼠標移動的約束,從而刪除以前繪製的矩形和繪製在當前鼠標位置一個新的。這可以通過在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;
是的,這是現代的做法。但是當然也可以使用一些內射變換,例如對合。 – 2013-04-04 18:10:13
@andreas我不明白你的意思 – 2013-04-04 20:05:36
我同意最好按照你描述的方式去做。但多年前,這可能有點沉重。 – 2013-04-04 20:10:30