Autor Beitrag
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 01.02.18 20: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.

ausblenden 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(00, ClientWidth, ClientHeight);
  png1 := TPNGObject.Create;
  png1.LoadFromFile(OpenPictureDialog1.FileName);
  Canvas.StretchDraw(Rect(00, ClientWidth div 2, ClientHeight), png1);
                                             
  {--------------------------------------------------------------------------}

    //COLOR_RGB: schwarzer Hintergrund anstatt Transparenz
    //COLOR_RGBALPHA: komplett weißes Bild
  png2 := TPNGObject.CreateBlank(COLOR_RGB, 16, ClientWidth div 2, ClientHeight);
  //png2.CreateAlpha;

  png1.Draw(png2.Canvas, Rect(00, png2.Width, png2.Height));

  //Canvas.StretchDraw(Rect(ClientWidth div 2, 0, ClientWidth, ClientHeight), png2);
  png2.Draw(Canvas, Rect(ClientWidth div 20, 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



BeitragVerfasst: Fr 02.02.18 02:20 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Symbroson
Symbroson Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Fr 02.02.18 07:59 
Vielen Dank :)
gibt trotzdem noch ein kleines Problem:
vorher:vorher nachher: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


user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Sa 03.02.18 09:12 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Symbroson Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: 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

_________________
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



BeitragVerfasst: Sa 03.02.18 12:51 
- Nachträglich durch die Entwickler-Ecke gelöscht -
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: 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 ^^

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: 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:
Symbroson Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Di 06.02.18 20: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)