Einzelnen Beitrag anzeigen

nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Auf ein Image ein transparentes Image an bestimmter Stelle ablegen

  Alt 27. Nov 2012, 13:03
Hab mal das Miniprojekt drangehangen.
1) Das ist kein Miniprojekt sondern nur eine .pas-Datei, wo man sich das Projekt dazu noch erstellen soll.
2) Das hab ich nicht gemacht, mir aber trotzdem mal die .pas angeschaut. Und mich als erstes mal wieder gefragt: Warum machen die nie 'ne ordentliche Einrückung? Alles an den Rand geklatscht.

3) Zum Code:
Delphi-Quellcode:
procedure TForm21.ffnen1Click(Sender: TObject);
begin
opendialog1.Execute;
Image.Picture.LoadFromFile(opendialog1.FileName);
label1.Caption:= InttoStr(Image.Width);
label2.Caption:= InttoStr(Image.Height);
end;

procedure TForm21.FormCreate(Sender: TObject);
VAR Bitmap : TBitmap;
begin
   Bitmap := TBitmap.Create;
   Bitmap.Width := Image.Width;
   Bitmap.Height := Image.Height;
   Image.Picture.Graphic := Bitmap;

   end;
In FormCreate erzeugst du ein TBitmap, weisst es dann Image.Picture.Graphic zu. Und dann in "Öffnen1Click" lädst du ein Bild aus einer Datei und weisst es Image.Picture zu. Also nicht nur, dass du in FormCreate ein Speicherleck erzeugst (TBitmap wird nirgends freigegeben), die ganze Aktion selbst ist auch sinnlos, da du ein leeres Bitmap zuweist, was aber ohnehin irrelevant ist, da es bei Öffnen1Click sowieso wieder überschrieben wird. Oder sehe ich das falsch?

4) Ich habe auch nicht so wirklich verstanden, was du vorhast. Aber mein Vorschlag aus der Kristallkugel ...

Das, was du da machst, klappt so nicht. Ein TImage ist kein Container für mehrere Images, sondern kann immer nur ein einziges TBitmap darstellen. Das was du machen musst, ist dein Zielbild mit dem Quellbild in einer extra Bitmap zu kombinieren und das dann erst im TImage darstellen. Also Bild1 + Bild2 = Bild3 oder als "Code":
Delphi-Quellcode:
Bitmap3.Canvas.Draw(0, 0, Bitmap1);
Bitmap3.Canvas.Draw(0, 0, Bitmap2);
Image.Picture.Assign(Bitmap3);
Um Transparenz musst du dich hier ggf. selbst noch kümmern und statt dem .Canvas.Draw vlt. mit BitBlt oder ähnlichem arbeiten.
  Mit Zitat antworten Zitat