Autor |
Beitrag |
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: Do 01.02.18 19:27
Guten Abend,
Ich habe mir von hier eine PNG implementation herausgesucht. Nur leider kann ich damit keine Bilder mit Tranzparenz zeichnen und dann speichern (Das Zeichnen ist das Problem).
Ich habe bisher die Modi 'COLOR_RGB' und 'COLOR_RGBALPHA' probiert und die zwei verschieden Methoden das Bild zu Zeichnen.
Sich die Deklaration von TPNGObject.CreateBlank mal anzuschauen wäre auch nicht verkehrt - da stehen die Modi, Farbtiefen usw drin.
Liegt das an mir? Wenn ja, was habe ich vergessen? Wenn nicht, kennt jemand eine Andere Bibliothek bei der das so in etwa funktioniert (mit link bitte )
Ich habe auch schon einige Varianten gesehen, bei denen das Zeichnen komplett übernommen wurde - Pixel für Pixel - und der Alphakanal separat - das wollte ich eigentlich vermeiden.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| const imgPath : string = 'C:\Users\user\Pictures\temp.png';
procedure TForm1.OpenPictureDialog1SelectionChange(Sender: TObject); var png1, png2: TPNGObject; begin Canvas.Rectangle(0, 0, ClientWidth, ClientHeight); png1 := TPNGObject.Create; png1.LoadFromFile(OpenPictureDialog1.FileName); Canvas.StretchDraw(Rect(0, 0, ClientWidth div 2, ClientHeight), png1);
png2 := TPNGObject.CreateBlank(COLOR_RGB, 16, ClientWidth div 2, ClientHeight); png1.Draw(png2.Canvas, Rect(0, 0, png2.Width, png2.Height));
png2.Draw(Canvas, Rect(ClientWidth div 2, 0, ClientWidth, ClientHeight));
png2.SaveToFile(imgPath); png1.Free; png2.Free; end; |
Einloggen, um Attachments anzusehen!
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 02.02.18 01:20
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: Symbroson
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: Fr 02.02.18 06:59
Vielen Dank
gibt trotzdem noch ein kleines Problem:
vorher: nachher:
Wäre cool wenn das mit den Alphakanälen auch funktionierte bisher werden alle transparenten Pixel bzw farbige Pixel mit Alphakanal komplett Transparent gespeichert
Frühlingsrolle hat folgendes geschrieben : | Bitte hier den try-finally Block anwenden. |
wo und wofür genau brauche ich hier den try..finally block?
LG
Einloggen, um Attachments anzusehen!
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 03.02.18 08:12
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: Sa 03.02.18 09:56
Was try..finally macht war mir schon klar, nur leuchtet mir nicht so ganz ein, warum ich das Objekt nur darin erstellen bzw freigeben soll. Ich versuche ja in meinem richtigen Code schon alles mögliche, dass beim Erstellen des png-Objektes keine Fehler passieren. Nagut vielleicht noch, wenn eine png Datei geladen wird, die gar keibe ist - also entweder umbenannt oder fehlerhaft - dann würde das Ganze Sinn machen. Oder gibt es sonst noch irgendetwas, was die Verwendung des try Blockes empfehlenswert macht?
Wegen dem Alphakanal werde ich mir vmtl mal eine andere Bibliothek heraussuchen - vielleicht auch eine, die auch 24 und 32 bit Bildtiefe unterstützt...
LG
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 03.02.18 11:51
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
haentschman
Beiträge: 285
Erhaltene Danke: 33
DX10 Berlin Professional
|
Verfasst: So 04.02.18 09:14
Moin...
[OT]
Zitat: | wo und wofür genau brauche ich hier den try..finally block? |
...mit dieser Aussage kannst du auch beim Vorstellungsgespäch hinten runter fallen.
[/OT]
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: So 04.02.18 09:34
Zitat: | ...mit dieser Aussage kannst du auch beim Vorstellungsgespäch hinten runter fallen. |
naja, noch ist ja ein klein wenig Zeit bis dahin ^^
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
haentschman
Beiträge: 285
Erhaltene Danke: 33
DX10 Berlin Professional
|
Verfasst: So 04.02.18 13:19
Zitat: | naja, noch ist ja ein klein wenig Zeit bis dahin |
...dann ist es ja gut. Das war kein Scherz von mir. Ich habe meinen ersten Programmierjob bekommen, weil ich im Quellcode des Tests try/finally drin hatte. Der Enwicklungsleiter hat mir damals gesagt, das 80% der Entwickler die sich bewerben (ohne Gewähr) es noch nicht mal kennen.
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: Di 06.02.18 19:39
Also ich hab mein Problem jetzt mit GR32 gelöst. Es gibt eine Erweiterung dazu namens GR32_PNG in deren Github-Repository inklusive Demo. Allerdings müsst ihr schon die Standard GR32 Bibliothek in Delphi eingebunden haben. Das hatte ich glücklicherweise schon bei AlgoSort installiert - daher war die Implementation doch recht einfach.
Vielleicht lag es auch ganz einfach daran, dass ich den Zeichenmodus nicht auf dmBlend umgestellt habe - das müsste ich vllt nochmal testen. Auf jeden Fall funktioniert die Transparenz jetzt - und zwar auch mit 32 Bit Bildtiefe. Die andere Bibliothek war ja auf bis zu 16 Bit beschränkt.
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
|