ich möchte hier eine Graphik in eine TPaintBox malen, das macht man Bekanntlich so:
Code: Alles auswählen
var Bmp:TBitmap;
Procedure TForm1.PaintBox1Paint(Sender: TObject);
Begin
PaintBox1.Canvas.Draw(0, 0, Bmp);
End;
Code: Alles auswählen
// Eine Kreismaske erzeugen, durch indem alle Pixel = clfuchsia zur Maske werden
bmp.canvas.brush.color := clfuchsia;
bmp.canvas.rectangle(-1,-1, bmp.width+1, bmp.height+1);
bmp.canvas.pen.color := clwhite;
bmp.canvas.brush.color := clwhite;
bmp.canvas.Ellipse(0,0, bmp.width, bmp.height);
Bmp.Mask(clfuchsia);
// Die Maske ist erstellt, ein erneutes Rectangle beschreibt nur die nicht Maskierten Pixel, man sieht also einen Roten Kreis und kein Rotes Rechteck
bmp.canvas.pen.color := clred;
bmp.canvas.brush.color := clred;
bmp.canvas.rectangle(0,0, bmp.width, bmp.height);
Code: Alles auswählen
Var
intf: TLazIntfImage;
x, y: Integer;
Begin
intf := Bmp.CreateIntfImage;
For x := 0 To Bmp.Width - 1 Do Begin
For y := 0 To Bmp.Height - 1 Do Begin
intf.Colors[x, y] := TColorToFPColor(clLime);
End;
End;
Bmp.LoadFromIntfImage(intf); // -- Das Zerstört die vorher erstellte Maske und wir sehen ein Grünes Rechteck und keinen Kreis, wie er in der Maske stand.
intf.free;
End;
Mittels bmp.TransparentColor := clfuchsia; und bmp.Transparent := true; kann ich nicht arbeiten, da mein User beliebige Farben eingeben darf und clFuchsia gehört da dazu
Was ich auch schon ausprobiert habe, ist mir zu merken wo die maske markiert hat und da dann clDefault hin zu schreiben, aber das wird immer zu schwarz aufgelöst..
Hat einer von Euch eine Idee, wie man das richtig realisieren kann ?