PNG ist drin ... jetzt noch drinner!

  • Hi Folks,

    Falk hat gerade meinen Beitrag zum Treffen für dieses Jahr gemerged (wer sagt, dass das immer erst NACH dem Treffen sein muss!?) Was gibt's also Neues? Ich habe die PNG-Funktionalität, die ich letztes Jahr vorgestellt habe, deutlich erweitert.

    Das betrifft zunächst das Handling von Alpha-Transparenzen beim Import von PNGs. Leider muss ich ein paar theoretische Erklärungen zum Thema Transparenz vorausschicken, um die Tragweite des Patches besser erklären zu können. Das ist mir leider letztes Jahr nicht so gut geglückt, deshalb jetzt hier.

    Moderne Systeme begreifen Transparenzen in einem Bildpixel in einer Abstufung von 0 - 255 (128 ist dann sozusagen halbdurchsichtig oder halbtransparent); so genannte Alpha-Transparenzen. In Echtfarben-PNGs hat oft jedes einzelne Pixel einen solchen Alpha-Transparenzwert. Damit kann man zum Beispiel weiche Kanten in Bildern realisieren. GEOS hingegen kann nur: ein Pixel ist sichtbar oder durchsichtig. Wenn man nun ein modernes Bild mit Alpha-Transparenzen ins GEOS Format umwandeln will, muss man Kompromisse eingehen.

    Letztlich gibt es zwei Möglichkeiten: (1) entweder man verrechnet den 255er Transparenzwert mit einer vorher festgelegten Hintergrundfarbe (die ominöse "blend color" im Graphics Viewer). Das Ergebnis sieht immer sehr gut bzw. optimal aus, aber Transparenzen gibt es hinterher nicht mehr. Das Bild hat dann die Hintergrundfarbe, die man als blend color angegeben hat. Wenn man das Motiv zum Beispiel mit weißer Hintergrundfarbe verrechnet und anschließend über einem, sagen wir, blauen Hintergrund einfügt, hat es trotzdem einen weißen Hintergrund und verschmilzt nicht mit dem blau.

    Oder aber (2), man wandelt die 255er Transparenz in eine GEOS 0/1 Transparenz um (sogenannte Maske), indem man guckt, ob ein Pixel EHER durchsichtig oder undurchsichtig ist. Den Grenzwert kann man selbst wählen, zum Beispiel alles über 128 macht man durchsichtig, alles unter 128 macht man undurchsichtig. Das Ergebnis hängt vom Motiv ab: hat das Originalbild sowieso klare Kanten und Transparenzwerte bei 0 und 255 (zum Beispiel bei Logos oder Clip-Arts) wird das Ergebnis ganz gut aussehen und man kann das Bild hinterher auf beliebig farbigen Hintergründen präsentieren. Hat das Originalbild mit Hilfe der Transparenzen jedoch weiche Verläufe oder Kanten realisiert, sieht das Ergebnis abgehackt, stufig oder ausgefranst aus. Im schlimmsten Fall werde große Teile des Bildes gar nicht mehr dargestellt.

    Hier bringt mein Patch nun ein bisschen mehr Flexibilität. Bisher war es so, dass man lediglich Variante 1 im Graphics Viewer nutzen konnte, wobei man mit der mysteriösen "Set PNG Blend Color" Funktion die Hintergrundfarbe setzen konnte. Diese Option ist aus dem Graphics Viewer jetzt wieder verschwunden (sorry Achim, aber die Arbeit mit der Hilfe war trotzdem nicht umsonst, denn die Funktionalität ist nur umgezogen, siehe unten...). Im Graphics Viewer geht es darum, ein Bild schnell zu betrachten und in jedem Fall immer alle Bildteile darzustellen. Daher nutzt der Graphics Viewer jetzt immer die Blend Color weiß für optimale Darstellung. Wenn man ein Bild via "Copy" in die Zwischenablage einfügt und dann in GeoDraw einfügt, hat es aber keine Transparenz, was schlecht sein kann, wenn man es für ein eigenes Projekt weiterverarbeiten will...

    Dehalb gibt es jetzt, NEU, einen echten super-duper PNG-Impex Filter! Man kann also direkt in GeoDraw auf "Importieren" klicken und dann dort eine PNG-Datei in der Liste auswählen. Und da gibt es dann einen kleinen "Import Options" Dialog, in dem man auswählen kann, ob man (1) oder (2) für die Umwandlung eines Alpha-Kanals verwenden will. Für den Import von Clip-Arts oder Logos empfiehlt sich hier halt immer Variante 2. In diesen Impex-Filter ist für meine Verhältnisse viel Arbeit geflossen, denn ich wollte das Ding so weit wie möglich in C schreiben. Marcus hat in den späten Tagen des zweiten Zeitalters noch dafür gesorgt, dass da schon einige Filter in C vorlagen und darauf konnte ich aufbauen.

    Das zweite große Feature, was dazugekommen ist - wer hätte das gedacht - ist PNG Export! Dies war mit Hilfe von KI in wenigen Tagen gewebt. Man kann Bilder als 1 Bit (monochrome), 4 Bit (16 Farben), 8 Bit (256 Farben) und 32 Bit (16 Millionen Farben) exportieren - letzteres erzeugt für transparente Bildteile eine Transparenzmaske bei der Umwandlung in eine Bitmap und wandelt diese Maske dann in einen Alphakanal um, so dass Transparenzen in einer mit GeoDraw erstellten GEOS Grafik auch als solche exportiert werden.

    Letzteres Feature ist noch nicht so gut getestet. Auch könnte man zum Beispiel überlegen, ob man noch eine 24-bit Variante einbaut, bei der gar keine Transparenz exportiert wird. Hier seid ihr gefragt, mit "Testen, Testen, Testen und an die User denken".

    Ich wünsche Euch viel Spaß und freue mich wie immer über produktives Feedback.

    Bye,
    MeyerK

  • Und gleich noch ein Feature Request: Ich würde mir wünschen, dass die Default-Einstellung "Convert to 1-bit mask" ist. Wenn man nicht direkt PNG anwählt (man also "no idea" lässt) erscheint nämlich der Optionen-Button nicht. Das kann man nicht ändern, oder (erscheinen, aber disabled?)

    Der Import funktioniert übrigens auch aus dem neuen Icon-Editor heraus. So wie es sein muss :)

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Ja, das habe ich auch schon überlegt, dir mit dieser default Einstellung entgegen zu kommen. Wir können das ja auf dem Treffen noch mal diskutieren und ggf gleich ändern. Davon abgesehen ist ja die API jetzt auch stabil und wenn du PNG zu Gonzo hinzufügst kannst du da natürlich auch eine andere default Einstellung setzen...

    Bye,
    MeyerK

  • Wie man PNG zu Gonzo hinzufügt, habe ich auch schon überlegt. Gonzo nutzt die ImpEx Library API gar nicht, ich müsste also direkt auf den Converter-Part zugreifen. Keine Ahnung wie man das macht.

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Das ist kein Problem!

    Die Funktion für den einfachen Import hat diese Signatur:
    VMBlockHandle _pascal _export pngImportConvertFile(FileHandle fileHan, VMFileHandle vmFile, pngAlphaTransformData* pngAlphaTransform)

    Wenn Du die Verarbeitung noch weiter anpassen oder einen Fortschrittsbalken anzeigen möchtest etc., findest Du hier ein Beispiel:

    pcgeos/Appl/Breadbox/Graphvwr/IMPBMP/imp_bmp.goc at master · HubertHuckevoll/pcgeos
    #FreeGEOS source codes. The offical home of the PC/GEOS operating system technology. For personal computing fans. For all developers and assembly lovers. For…
    github.com


    Tatsächlich ist das Impex-System aber etwas das wir mal anfassen und erweitern und vereinfachen sollten... es juckt mich in den Fingern, aber gleichzeitig gibt es so viele Dinge die dringender sind...

    Bye,
    MeyerK

  • Hi. Ich habe jetzt auch mal ein wenig probiert - scheint ja ganz gut zu funktionieren. ^^ Allerdings werden viele PNG's nicht geöffnet. Da erscheint dann immer die Meldung "Fehler beim Importieren der Grafik. Der Prozess wurde abgebrochen." Es scheint so, als wenn es mit der Größe der Datei zusammenhängt. :/

    Über eine Anpassung der Hilfe für GeoDraw können wir dann reden, wenn alle zusätzlichen Dialogboxen eingedeutscht wurden und wenn sicher ist, das diese Funktion so bleibt, wie sie ist. ;)

    Gruß Achim


    PC/GEOS unter Linux in der DOSEMU = UNSCHLAGBAR!

  • Moin zusammen.

    Keine Ahnung, ob es da einen Zusammenhang gibt, geben kann. 😄 Bei diesem Release startet mein Lieblingsspiel "Freecell" bei der am Handy verwendeten Bildgröße bei "Starte im Vollbild" ein wenig passender. (Da gibt es auch ein Issue zu😄)

    Der Button "Neues Spiel" ist immer noch nicht vollständig zu sehen, aber trotz der Lage am Displayrand bedienbar., 😁

    Die Im- / Export Möglichkeiten zu testen habe ich noch nicht geschafft.

    Grüße Klaus / Locke

    Edited once, last by Lockesoft (November 6, 2025 at 3:33 PM).

  • Hallo,

    habe jetzt auch ein bisschen mit dem Graphics Viewer und GeoDraw gespielt. Klappt alles ganz ordentlich. Es kommt aber immer auf die PNG-Bilder an. Oder wie sie erstellt wurden. Ab einer bestimmten Größe der Bilder gibt es Probleme. Der Viewer zeigt auch sehr große PNG-Bilder an die bei GeoDraw nicht auf eine DIN-A4 Seite passen. Wird diese dann exportiert, kann sie nicht mehr geöffnet werden. Skaliert man das Bild vor dem Export auf die DIN-A4 Seite, kann man sie später wieder öffnen. Die exportierten PNG-Bilder sind größer als die Originale. Vielleicht ist das der Grund. Beim Import bei Import Optionen, weitere Farben, wird dort auf RGB umgestellt und man versucht die Schieberegler zu bedienen schließt sich sofort das Fenster.

    Gute Arbeit Konstantin :thumbup:

    Jens

    - geos-tiger -

    Edited once, last by Geos-Tiger (November 6, 2025 at 3:28 PM).

  • Gutes Feedback, Danke Jens! Da kann ich ja noch mal gucken!

    Und dabei gleich die neue Dialogbox "Import Options" in GeoDraw eindeutschen? 8)

    Guckst du Bildschirmfoto:

    Ja, in der Tat verwirrend in einem deutschen PC/GEOS eine englischsprachige Dialogbox zu finden. Dazu noch eine, bei der mir der Text so gar nichts sagt außer, daß es irgend etwas mit Transparenz zu tun hat. Und schon dieser Begriff geht so ziemlich an mir vorbei. ||

    Und wenn dort ein deutscher Text steht, kann ich (vielleicht) etwas damit anfangen und die Hilfe dazu entsprechend erstellen.

    Gruß Achim


    PC/GEOS unter Linux in der DOSEMU = UNSCHLAGBAR!

    Edited 2 times, last by Achim (November 20, 2025 at 5:30 PM).