![]() |
Leeres TPNGImage erzeugen
Irgendwie hab ich so meine Probleme ein leeres, transparentes TPNGImage zu erzeugen in dem ich dann zeichnen kann.
Ich erhalte zwar ein leeres, transparentes Image in den richtigen Abmessungen aber der Rest schlägt fehl. Lade ich ein vorhandenes Bild von der Platte wird meine Linie darauf angezeigt. Hier mal mein Versuchsaufbau.
Delphi-Quellcode:
Wo ist mein Fehler?
procedure TForm1.Button1Click(Sender: TObject);
var Img: TPNGImage; Bild: TPngImage; begin Bild:=TPNGImage.Create; Bild.LoadFromFile('c:\dings\box.png'); Img:=TPNGImage.Create; Img.CreateBlank(Bild.Header.ColorType, Bild.Header.BitDepth, Bild.Width , Bild.Height); Img.CreateAlpha; // Img.Assign(Bild); // Dann funktionierts. Das will ich aber nicht. // irgendwas mit Img machen Img.Canvas.CopyMode:= cmSrcCopy; Img.Canvas.Draw(0, 0, Bild); Img.Draw(Bild.Canvas, Rect(0, 0, Bild.Width, Bild.Height)); Img.Canvas.Pen.Color:=clBlack; Img.Canvas.MoveTo(0, 0); Img.Canvas.LineTo(50, 50); Self.Canvas.Draw(20, 20, Img); // Ausgabe auf dem Form... Img.SaveToFile('c:\dings\box2.png'); // ... und zur Kontrolle speichern - beides leer end; Toni |
AW: Leeres TPNGImage erzeugen
Delphi-Quellcode:
Ein Problem ist die Beschränkung des TCanvas bezüglich des Alphakanals, Du siehst die gemalten Linien nur wo Alpha>0, hier könnte GDI+ helfen, welches mit Alphakanälen umgehen kann.
procedure TForm3.Button1Click(Sender: TObject);
var Img: TPNGImage; Bild: TPngImage; i:Integer; begin Bild:=TPNGImage.Create; Bild.LoadFromFile('C:\Icons\IconCollection\ix_ap_all\128x128\shadow\add.png'); Img:=TPNGImage.CreateBlank(COLOR_RGBAlpha, 8, Bild.Width , Bild.Height); Img.CreateAlpha; BitBlt (Img.Canvas.Handle, 0 , 0 , Bild.Width, Bild.Height, Bild.Canvas.Handle, 0, 0, SRCCOPY); For I := 0 To Bild.Width - 1 Do CopyMemory (Img.AlphaScanline [i], pByte (dword (Bild.AlphaScanline [i])), Bild.Width); Img.Canvas.Pen.Color:=clLime; Img.Canvas.MoveTo(0, 0); Img.Canvas.LineTo(50, 50); Canvas.Draw(20, 20, IMG); // Ausgabe auf dem Form... end; |
AW: Leeres TPNGImage erzeugen
Vielen Dank für deine rasendschnelle Antwort.
Dein Beispiel führt zwar zu dem selben Ergebnis wie Assign, was ich ja nicht wollte, aber ein leeres PNGImage hab ich immer noch nicht. Muss ich mich denn ganz von der Idee verabschieden in ein PNG hineinzeichen, Bitmaps ausschneiden und hinein zu kopieren? Sollte ich wenn ich Transparenz und Semitransparenz brauche vielleicht lieber mit TBitmap32 auseinander setzen? Oder hab ich dort wieder die selben Probleme? Oder ist GDI+ der einzige Weg? Hab damit schon mal experimentiert aber es ist mir eigentlich zu komplex für meine Mini-Aufgabe. Toni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz