Bild Konvertierung Atari ST...

  • Hallo.


    Diese Bilderkonvertierung treibt mich noch in den Wahnsinn... Vielleicht könnt ihr mir helfen ?!


    Ich habe in 68k Assembler eine Routine geschrieben, die ein PI1-Bild, also lowres, anzeigt. Also 320x200 in 16 Farben bzw. 4 Bit Farbtiefe. Ein Beispielbild aus dem Internet funktioniert

    einwandfrei. Natürlich wollte ich da jetzt ein eigenes Bild einbauen. Am Atari ST hab ich Degas Elite und Papillon. GIMP am PC wirft mir kein, am Atari lesbares Format aus. Mein Kumpel hat das Bild mit Photoshop zu einer IFF-Datei umgewandelt. Diese kann ich in Degas Elite laden und könnte es somit auch zu PI1 konvertieren. Allerdings wird die Farbpalette nicht aus der Datei übernommen, Das Bild wird immer mit der Standard-GEM-Palette dargestellt.


    Wie geht ihr da vor ?


    Vielen Dank !


    Gruß Jan

  • Wie geht ihr da vor ?

    Ehrlich gesagt, steh ich gerade vor exakt dem gleichen Problem. Ich will am PC was mit "aseprite" pixeln und das dann als ein PI1 für den ST konvertieren. Mein Plan ist, auf dem PC einen Converter zu basteln, der mir BMP oder PNG (oder notfalls auch TGA) in PI1 umconvertiert.

    Aber der Plan ist noch nicht in die Tat umgesetzt... ;)

  • Ahja - nice! Muss ich mir mal anschauen.

    Ich hatte ehrlich gesagt noch gar nicht danach gesucht ob es sowas schon fertig gibt.


    Aber mein Ziel ist glaub ich doch ein bissl weiter gesteckt. Ich möchte am Ende beliebig große PNGs mit Tilesets zu eigenen Formaten konvertieren. Aber 320*200 PNG zu PI1 wäre dabei halt der erste Schritt als eins der Zielformate - und nützlich als proof of concept um zu sehen dass das ganze "drumherum" funktioniert (PC Format einlesen, Palette konvertieren, pixel zu Bitplane Konvertierung, little vs big endian...).

  • Ich habe das Problem gelöst. Es gibt ein Plugin für Gimp, das Amiga IFF Files unterstützt. Hier der Link:


    https://blitterstudio.com/gimp-iff-plugin/


    Ich habe also in GIMP das Bild abgeändert zu einer Auflösung mit 320x200 Bildpunkten und 4 Bit Farbtiefe. Anschließend habe ich es als IFF exportiert. Dieses habe ich am ST dann mit Degas Elite geladen, die Compression ausgeschaltet und es als *.PI1 Datei abgespeichert. Funktioniert wunderbar ! Das Bild ist perfekt und sieht am Atari lowres erstaunlich gut aus !


    Gruß Jan

  • Zeig doch mal ;)

    "Link arms,don't make them." - Du musst Gott für alles danken, sogar für einen Franken

  • Dieses Bild nicht. Ich mache heute Abend ein anderes.


    Gruss Jan

  • Ich hab einfach mal ein Bild von deiner Website geklaut. Das zarte lila der Zimmerwand musste ich rausfiltern, da sonst das ganze Bild einen lila-stich gehabt hätte. Abfotografiert von einem Atari sc1224 Monitor.

    Ich hätte jetzt mit dem Dithering noch spielen können, um das Bild zu perfektionieren, aber es ging ja jetzt nur mal um ein Beispiel...



    Gruss Jan

  • Sieht super aus ;) Übrigens: Wenn du das Bild auf meiner Webseite zum Zoomen anklickst, dann ist der blau/lila Stich weg. Der ist nämlich nur auf den Webseiten, um den "Retro-Effekt" zu verstärken ;)

    "Link arms,don't make them." - Du musst Gott für alles danken, sogar für einen Franken

  • Ah ok. Es war ja nur ein Beispiel.


    Als kleine Ergänzung noch. Das war ja jetzt wieder ein "Vollbilld" mit 320x200 Bildpunkten. Gestern Abend hatte ich aber noch selber ein Bild erstellt. 320x200 Pixel schwarz und auf den schwarzen Hintergrund habe ich ein kleineres Bild eingefügt. Dieses Bild wurde wegen dem großen Schwarzanteil sehr klein im Speicher wegen der Kompression. Auf Anhieb habe ich es nicht hinbekommen, das daraus umgewandelt *.IFF File am Atari zu öffnen.

    Letzten Endes hab ich es hinbekommen. Man muß das Bild im Paint als 24 Bit Bitmap abspeichern und anschließend erst konvertieren. Dann hat es ungefähr 30kb und wenn man es als *.IFF konvertiert hat, lässt es sich problemlos am Atari öffnen und man kann es in Degas Elite als *.PI1 umwandeln..


    Gruß Jan

  • Ich mach den alten Thread nochmal kurz auf für eine Ergänzung:


    Nachdem meine eigenen Basteleien eine ganze Weile geruht haben, hab ich mein angedachtes Projekt jetzt doch wieder aufgegriffen. Als Nebenprodukt hab ich jetzt tatsächlich mal einen eigenständigen PngToDegas Converter fertig gemacht. ::hacking:: (siehe Anhang)


    Es ist ein kleines kommandozeilen-Tool für Windows mit dem man direkt *.PNGs in die Degas Formate *.PI1, *.PI2, *.PI3 konvertieren kann. Das *.PNG muss allerdings schon "passend" vorbereitet sein, in dem es genau eine der Atari-Auflösungen hat und die Anzahl der verwendeten Farben die auf dem Atari unterstützte Anzahl der jeweiligen Auflösung nicht übersteigen darf. Ich wollte nicht zu viel Logik in das Tool stecken. Das Tool soll sich wirklich auf die reine Konvertierung von PNG zu Degas konzentrieren. Arbeitsschritte wie die Auflösung zu reduzieren und die Anzahl Farben zu reduzieren kann man auf dem PC problemlos mit anderen Tools machen (z.B. Gimp).


    Vielleicht ist das Tool ja auch noch für jemand anderen nützlich - daher veröffentliche ich es mal hier im Anhang... :)

  • Die Palette zu konvertieren war nicht so schwierig.


    Bei Bildern, die im PNG Format schon palettiert abgespeichert sind wird die Palette mit 8 Bit pro Farbkanal abgespeichert. Also für die drei RGB Farben dann insgesamt 24 Bit. Das sind 16,7 Mio mögliche Farben (und damit mehr als die 262144 vom VGA Standard).


    Auf dem Atari ST (nicht STE) sind es jedoch nur insgesamt 3 Bit pro Kanal, was genau die 512 verschiedenen Farben ergibt.


    Um von den 8 Bit pro Farbkanal auf die 3 Bit pro Kanal herunterzurechnen, hab ich einfach den jeweiligen 8 Bit Wert um 5 Bit nach rechts geshiftet. D.h. die höherwertigsten 3 Bits bleiben erhalten und die niederwertigen 5 Bit werden einfach "abgeschnitten".


    Natürlich führt das ggf. dazu, dass der ST die feinen Farbnuancen nicht sinnvoll darstellt, aber das ist nunmal das Hardware-Limit des STs.

  • Cool ! Ich werde mir das mal anschauen später. Für meine Programme kann ich das gut gebrauchen. Aus gesundheitlichen Gründen konnte ich die letzten paar Monate nicht viel machen. Deswegen hab ich an dem Assembler-thread auch noch nicht weitergemacht. Ich brauch noch etwas Zeit, aber demnächst gehts weiter… 😊


    Gruss Jan

  • Es gibt verschiedene, einfache Möglichkeiten die harten "Höhenlinien" im Ergebnisbild zu entschärfen, eine davon ist:


    Zu jedem 8-bit Wert eine Zufallszahl im Bereich von 0x00 bis 0x1f zu addieren und dann erst um 5 Bits nach rechts zu schieben.

    Aufpassen beim Überlauf der 8 Bits, diese begrenzen auf 0xff.


    Wenn der (Peuso)Zufallsgenerator aber schlecht ist, dann gibt es evtl. wieder andere, sichtbare Artefakte im Bild.

  • Hmm... ich glaube, das was du beschreibst könnte bei Truecolor-Bildern Sinn machen. Wenn man z.B. ein 24 bit Truecolor-Bild nach 16 bit Highcolor konvertieren will. In beiden Fällen wird dort direkt die Farbe jedes Pixels unabhängig voneinander kodiert - allerdings bei unterschiedlicher Genauigkeit. Dein vorgeschlagenes Verfahren dürfte dort die sonst sichtbaren "Höhenlinien" reduzieren. Ist quasi eine Form eines "Dithering" Algorithmus.


    Bei den Atari Grafik-Modi (und damit auch den Degas-Grafikformaten) handelt es sich aber um Bild-Kodierungen, in denen zu jedem Pixel nur der Index (z.B. 4bit/pixel) in eine Palette abgespeichert wird - und dann für jeden Eintrag der Palette (von insgesamt 16 Einträgen) dann die RGB-Farbwerte als 16 Bit Werte, von denen nur 9 Bits verwendet werden (je 3 Bits pro R, G und B Kanal).


    Meine Beschreibung der Reduktion von 8-Bit pro Kanal zu 3-Bit pro Kanal bezog sich nur auf die Konvertierung der Einträge der Palette. Dein Verfahren lässt sich aber glaube ich nicht sinnvoll auf die Palette übertragen.


    Bei meinem Tool hab ich auch bewusst auf ein "Dithering" verzichtet. Ich glaube, das kann man besser mit Gimp auf dem PNG erledigen. Mir war es lieber, dass das Tool nicht zu viel selbst macht. So hat man auf PNG Ebene bereits mehr Kontrolle darüber, wie nachher auf Atari das Bild repräsentiert wird. Z.B. wird bei bestimmten PNGs, die auch schon als Index-Pixel und Palette abgespeichert sind, die Reihenfolge der Farben in der Palette beibehalten. Das kann z.B. wichtig sein, wenn man durch Paletten-Cycling eine Animation im Bild vortäuschen will. (Stichwort: Neochrome Wasserfall).

  • Hab das Tool mal kurz ausprobiert, ist schon nützlich. Wäre toll, wenn du noch weitere ST-Formate unterstützen könntest, ich denke da an IMG, PIC (das ist fast identisch mit PI3), PAC und Neochrome.


    Und die Konvertierung in die andere Richtung wäre auch sehr nützlich. Und wenn ich schon bei Wünschdirwas bin, dann wäre Batchbetrieb mit Wildcard ganz toll:


    PngToDegas_v1.0.0.exe path_to\*.png


    Andererseits wäre auch eine GUI ganz nett, die das Bild vorher/nachher anzeigen kann, optional auch im Batchbetrieb... Das i-Tüpfelchen wäre ein Plugin für diese Formate in Irfanview...

  • Puh - das sind aber viele Wünsche auf einmal! :D


    Also das mit den Wildcards sollte sogar eigentlich schon tun. Das hab ich extra eingebaut und beim Testen sowieso oft verwendet. Probier's mal aus!


    Zu den anderen gewünschten Features: ehrlich gesagt ist das Tool ja nur ein Nebenprodukt von was anderem. Quasi nur Mittel zum Zweck. Und da es hier ja diesen Thread gibt, hab ich's halt soweit als minimales Tool "fertig" gemacht, dass es auch jemand anderem von Nutzen sein könnte.

    Aber ob ich darüber hinaus noch sehr viel Zeit in das Tool reinstecken will glaub ich gerade eher nicht...


    Auf dem ST gibt's doch bestimmt schon Tools, die zwischen den verschiedenen ST-üblichen Formaten hin und her konvertieren können oder? Das Problematische ist ja hauptsächlich der eine Schritt von der "neuen" in die "alte" Welt. (Ok - und zurück von der "alten" in die "neue" Welt würde auch noch Sinn machen - vielleicht mache ich das doch noch irgendwann...)

  • Auf dem ST gibt's doch bestimmt schon Tools, die zwischen den verschiedenen ST-üblichen Formaten hin und her konvertieren können oder?

    Eingeschränkt ja, aber alles sehr manuell mit vielen Klicks, und je nach Quell/Ziel-Format muss man das eine oder andere Tool verwenden. So ein "Schweizer Taschenmesser", das in alle Richtungen konvertiert, da wird es schon schwierig.