Entwickler-Ecke
Multimedia / Grafik - PNGObject mit Transparenz speichern
Symbroson - Do 01.02.18 20:27
Titel: PNGObject mit Transparenz speichern
Guten Abend,
Ich habe mir von
hier [
https://github.com/JackTrapper/pngdelphi/] 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; |
Delete - Fr 02.02.18 02:20
- Nachträglich durch die Entwickler-Ecke gelöscht -
Symbroson - Fr 02.02.18 07: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
Delete - Sa 03.02.18 09:12
- Nachträglich durch die Entwickler-Ecke gelöscht -
Symbroson - Sa 03.02.18 10: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
Delete - Sa 03.02.18 12:51
- Nachträglich durch die Entwickler-Ecke gelöscht -
haentschman - So 04.02.18 10:14
Moin... 8)
[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. :lol:
[/OT]
Symbroson - So 04.02.18 10:34
Zitat: |
...mit dieser Aussage kannst du auch beim Vorstellungsgespäch hinten runter fallen. :lol: |
naja, noch ist ja ein klein wenig Zeit bis dahin ^^
haentschman - So 04.02.18 14:19
Zitat: |
naja, noch ist ja ein klein wenig Zeit bis dahin |
...dann ist es ja gut. Das war kein Scherz von mir. :P 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. :shock:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!