Hallo Besucher, der Thread wurde 2,2k mal aufgerufen und enthält 10 Antworten

letzter Beitrag von ogd am

Amiga Paint- oder Koala Painter-Bilder unter Linux konvertieren?

  • Ich wollte ein älteres Projekt nochmal aufgreifen, der Grafiker hatte damals mit Amica Paint gearbeitet - ich hab hier also knapp 50 Grafiken im Amica Paint-Format vorliegen. Kriege ich die irgendwie unter Linux in ein modernes Format konvertiert? Möchte möglichst nicht jedes Bild einzeln auf dem C64 konvertieren müssen (da gibt's sicher irgendwelche Konverter, auch wenn mir jetzt gerade keiner einfällt).


    Ich meine es gab auf dem C64 eine Möglichkeit, alle Amica Paint Bilder einer Disk in Koala zu konvertieren, müsste ich nochmal suchen. Ein Linux-Konverter für Koala Painter ginge also auch.

  • Warum startest du die Dinger nicht einfach im Emulator und machst Screenshots?


    Beispiel: WinVICE 2.4 -> Bild anzeigen mit Amica Paint -> Snapshot -> Save/Stop Media File -> Select Driver -> PNG/BMP -> Speichern -> Fertig


    Für 50 Grafiken ne Sache von vielleicht ner knappen Stunde.


    Stapelverarbeitung suchen, verstehen, File extrahieren usw. wird vmtl genau so lang oder länger dauern

  • Das Thema hatten wir schon in ähnlicher Form hier.


    Du kannst die Bilder in einem D64 Image mit DirMaster unter Windows oder mit c1541 (ist im VICE enthalten) unter Win/Linux/MacOSX extrahieren und dann mit z.B. xnView anzeigen und in einem anderen nichtverlustbehafteten Format wie PNG/BMP speichern. xnView erlaubt auch den Batchbetrieb für die Konvertierung.


    Beispiel für Windows: Alle Koala Files in einem D64 in einer Textdatei speichern (kann man dann mit SED/AWK etc. sezieren):
    c1541.exe -attach mydisk.D64 -list @8:[b]* > filelist.txt


    Diese kann man als Basis für XnConvert nehmen. Das müsste ähnlich auch in Linux gehen.

  • Amica-Paint -> Koala:

    PHP: ami2koa.php
    1. <?php
    2. echo preg_replace_callback('!\xc2(.)(.|$)!s', function($m){
    3. return str_repeat($m[2], ord($m[1]));
    4. }, stream_get_contents(STDIN));
    Shell-Script
    1. php ami2koa.php < bild.ami > bild.koa


    Für koala und fli bilder kann ich das C64Gfx paket empfehlen, also die wandlung richtung c64 ist verbesserungswürdig aber du willst ja weg. wandelt bilder von/nach netpbm Beispiel:

    Shell-Script
    1. c64toppm < c64bild | pnmtopng > neu.png
  • Amica-Paint -> Koala:

    PHP: ami2koa.php
    1. <?php
    2. echo preg_replace_callback('!\xc2(.)(.|$)!s', function($m){
    3. return str_repeat($m[2], ord($m[1]));
    4. }, stream_get_contents(STDIN));

    Wow - Ich hatte mich auch bereits an einer ähnlichen Konvertierung mittels PHP versucht, aber das ist schön kurz und knackig ;)


    Für koala und fli bilder kann ich das C64Gfx paket empfehlen

    LOL, das hatte ich gestern schon gefunden, aber nicht gesehen dass das Sourcen enthält... Vielen Dank für das Skript und den Tipp!


    Problem war noch, dass Amica Paint-Dateien zwar nur gepackte Koala-Bilder sind aber eine falsche Startadresse haben ($4000 statt $6000) - c64toppm hat die Dateien deswegen für AFLI-Bilder gehalten. Hab einfach mal vor dem Compilieren die entsprechenden Startadressen in c64toppm.c getauscht dann ging das problemlos. Vielen Dank!


    Jetzt noch ein bisschen Nachbearbeitung (ein Koala-Bild in eine 160x200 Bitmap konvertieren? komische Entscheidung...), dann habe ich exakt was ich wollte.


    syshack:


    Danke für den Tipp mit xnView, aber das hat meine Amica-Paint Bilder nicht erkannt.


    @TheRyk


    von *Hand*? Uh... ;)

  • Wow - Ich hatte mich auch bereits an einer ähnlichen Konvertierung mittels PHP versucht, aber das ist schön kurz und knackig ;)


    Mein erster versuch war auch länger ;-)


    LOL, das hatte ich gestern schon gefunden, aber nicht gesehen dass das Sourcen enthält... Vielen Dank für das Skript und den Tipp!

    Gerne doch.

    Problem war noch, dass Amica Paint-Dateien zwar nur gepackte Koala-Bilder sind aber eine falsche Startadresse haben ($4000 statt $6000)


    Hier mit änderung der Start-Addresse:

    PHP: ami2koa.php
    1. <?php
    2. echo chr(0x00).chr(0x60).preg_replace_callback('!\xc2(.)(.|$)!s', function($m){
    3. return str_repeat($m[2], ord($m[1]));
    4. }, substr(stream_get_contents(STDIN), 2));


    Jetzt noch ein bisschen Nachbearbeitung (ein Koala-Bild in eine 160x200 Bitmap konvertieren? komische Entscheidung...), dann habe ich exakt was ich wollte.

    Shell-Script
    1. c64toppm < c64bild.koa | pnmscale -xysize 160 200 -nomix | pnmtopng > neu.png

    (oder pnmto*/ppmto* was wu willst)

  • Hier mit änderung der Start-Addresse:

    PHP: ami2koa.php
    1. <?php
    2. echo chr(0x00).chr(0x60).preg_replace_callback('!\xc2(.)(.|$)!s', function($m){
    3. return str_repeat($m[2], ord($m[1]));
    4. }, substr(stream_get_contents(STDIN), 2));

    Vielen Dank.


    (oder pnmto*/ppmto* was wu willst)

    Ich nehme immer die Imagemagick-Tools, da kenne ich mich aus. Hab jetzt 50 perfekte PNG-Bilder hier liegen, *freu*.

  • Warum startest du die Dinger nicht einfach im Emulator und machst Screenshots?

    :schreck!: :schreck!: :schreck!: Weil ein Coder sowas nie so machen würde, auch wenn es drei Mal so lange dauert! :bgdev


    @Korodny :
    xnView (unter Windows zumindest) kann die .KOA und .AMI Extensions auch nur, wenn man alle Dateitypen in den Optionen einschaltet:


    -->option/General/Display all formats


    Und unter Windows auch nur, wenn Amica-Paint-Bild = .AMI Extension und eben .KOA für Koala.
    Ein Koala als .AMI wird eben nicht erkannt. Doof.


    @alx: Kannst Du bitte Dein Script noch erläutern?
    Wenn ich meinen bescheidene Kenntnisse trauen kann, rufst Du eine Inline Funktion, um die RLE Kodierung zu "expandieren": Die Anzahl Zeichen/Bytes darin mit einem Wiederholung/Repeat und hast dann die unkomprimierten Bytes im Output, also das unkomprimierte Koala Format. RexEx ist für mich immer so ein Buch mit sieben Siegeln, kannst Du das auch erklären, bitte?

  • Kannst Du bitte Dein Script noch erläutern?

    Amica-Paint ist Magic-Byte gepackt, magic = 0xc2, gefolgt von anzahl und inhalt. Alle "echten" vorkommen von 0xc2 müssen so behandelt werden, also ein mal 0xc2 = "0xc2,0x01,0xc2". Am ende der datei ist ein magic-byte mit länge 0 (und ohne inhalts byte).


    - Ausgegeben werden 2 bytes (lade adresse)
    - und der ausgepackte input, wobei die ersten beiden bytes des inputs abgeschnitten werden (lade adresse)
    - die RegEx sucht nach folgendem: dem byte 0xc2 gefolgt von einem beliebigen byte gefolgt von entweder einem beliebigen byte oder dem datei-ende
    - das s am ende sogt dafür dass zeilen-übergreifend gesucht wird (normaler weise nur innerhalb von zeilen, also sachen die durch \n getrennt sind, gesucht)
    - jedes dieser vorkommen wird ersetzt durch: das zweite byte (leer, wenn datei-ende) wird so oft wiederholt wie das 1. byte angibt
    - dieses script setzt voraus dass die datei "wohlgeformt" ist


    P.S.: ich bevorzuge "normales" RLE, also ohne magic byte, so sieht die von mir benutzte version aus:
    - 0x00 = datei-ende
    - 0x01-0x7f = das folgende byte wird (ZAHL + 2) mal wiederholt
    - 0x80-0xff = die folgenden ((ZAHL & 0x7f) + 1) bytes werden direkt ausgegeben
    der auspack-code ist länger aber schneller und die gepackte datei ist meisstens kleiner (das einpacken aber komplizierter)


  • xnView (unter Windows zumindest) kann die .KOA und .AMI Extensions auch nur, wenn man alle Dateitypen in den Optionen einschaltet:

    Danke, das hatte ich bereits versucht. Aber dann scheinbar nur noch mit den bereits nach Koala konvertierten Bildern versucht - und die hatten ja die falsche Startadresse, vermutlich hat sich xnview daran verschluckt.