Hello, Guest the thread was called1.3k times and contains 15 replays

last post from sidguy at the

Bilddaten aus einer RAW Datei rekonstruieren

  • Hallo Forum,


    Leider scheint es ziemlich unmöglich zu sein aber ich frag hier dochmal nach.
    Es geht ums Thema, ein IFF Bild wurde für einen Assembler Quellcode ins RAW Format konvertiert. Da werden ja die Bitplanes "roh" hintereinander plus zuletzt eventuell auch die Farben abgelegt.
    Nun ist mein Problem ich bastel grad am genannten irgendwo im Netz gefundenen Quellcode rum und möchte das genannte Bild, das eigentlich nen Logo ist und oben Links/Rechts hin-zurückscrollt durch eines von mir ersetzen. Nur findet man bei einem RAW File ja die Maße des Bildes nicht mehr raus.
    Das originale RAW-Logo hat 8Farben/3 Bitplanes hat insgesamt 22932 bytes und wie ich aus dem Quelltext auch raussehe ist eine Bitplane also 7644 bytes groß und wie es aussieht sind die Farben nicht mit dran sondern in der Copperlist fix definiert.


    Gibt es irgend ein Trick oder ein möglichen Vorgang aus z.b der Information daß eine Bitplane 7644 bytes hat die Maße , also Width und Height rauszubekommen?. Im Quelltext konnte ich leider nichts an mehr finden das helfen würde.


    Kennt sich vielleicht jemand hier damit aus oder hat vielleicht mit 22932Bytes RAW Bild-Dateien schon gearbeitet und weis noch was das für ne Auflösung war (das wär nen Wunder ^^ )?.


    Der Author des Quelltextes hat noch das Logo als IFF-Bild mit beigepackt, nur hat das die Maße 640X200 was klarerweise auch von der Größe her dann als RAW nicht stimmen kann, ich schätz mal das Logo wurde hier dann mit anderen Maßen rausgeschnitten.

  • Testweise jede Bitplane mit $00 $ff füllen, das Programm laufen lassen und dann die Spalten abzählen? Dann hat man die Breite auf sechzehn Pixel genau und kann in einem zweiten Durchlauf den exakten Wert ermitteln.

  • Hallo,
    folgendes sind die ganzzahligen ergebnisse für die Auflösung die ein vernünftiges Bild ergeben könnten:
    273-224
    294-208
    312-196
    336-182
    364-168
    392-156


    Welches es ist kann nur durch ausprobieren erraten werden. Es gibt auch noch weitere Ergebnisse, ich ging mal davon aus dass das Bild nahe am 4:3 format liegt.

  • Danke schon mal für eure Tipps, werde das schon mal alles testen
    Also das Logo im IFF File müsste ne Breite von 430 Pixel haben, aber eben nur das Logo der Rest ist Hintergrund/schwarz aber es könnte ja dann eben noch schwarzer Hintergrund mit dranhängen oder was weis ich.

  • Die copperliste habe ich schon durchgeguckt aber noch nichts rauslesen können.
    Hier mal der Teil für das Logo aus der copperliste:



    könnte man hier vielleicht was raussehen?.


    die PLAN1x sind die Bitplanepointer für das Logo.


    Danke Blade die versuch ich noch mit.

  • So ich melde mich nochmal zurück und möchte mich auch gleich für die Verspätung entschuldigen, hatte ziemlich viel um die Ohren in letzter Zeit.
    Bin die letzten Tage doch bei Zeit immer wieder ran und habe alles mögliche ausprobiert und hab jetzt die Lösung gefunden. :thumbsup:


    Die hier vorgeschlagenen Auflösungen führten leider nicht zum Ziel.
    Hab auch die Methode von MacBacon getestet also die Bitplanes mit $00ff gefüllt, ging auch gut nur wie es sich herausstellte lief das Bild von der Größe her weit über den rechten Bildschirmrand hinaus. Ein "Bigscroll", eine Schrift/Logo die links/rechts hin und her schwingt. Und das abzählen im laufenden Betrieb war für mich eher unmöglich aber der Ansatz war gut.


    Dann fiel mir ein anderer Weg ein, ein Grafik-Ripper-Searcher den ich noch irgendwo auf den Disks fand. Diskette gemacht mit dem Demo mit originalem Logo und den Ripper drauf.
    Demo laufen lassen, dann Ripper gestartet und den Grafiksalat durchsucht. Beim Ripper kann man mit Modulo und Breite rumspielen und bald konnte ich das Logo mit einer Breite von 784 Pixel durchsehen. Damit ging ich dann wieder an den Quelltext, bastelte mir ein Test-Logo und es funktionierte.


    Die genaue Auflösung war also 784 Breite X 78 Höhe. 8)


    Ich möchte mich nochmal für die Tipps hier bedanken.

  • Du hättest die Werte auch einfach ausrechnen können. Wenn ich mich noch richtig erinnere:

    Code
    1. ; DIWSTRT=$1961(V25,H97) --- DIWSTOP = $09D1(V9,H209)
    2. DC.L $008E1961,$009009d1,$01040000


    Dadurch wird eine Displaybreite von 368 Pixel gesetzt.

    Code
    1. ; scroll und modulo(52)
    2. xoffset:dc.l $010200ff,$01080034,$010A0034 ; logo stuff...
    3. DC.L $2c11FFFE,$01003200
    4. dc.l $2d11fffe,$01080034,$010a0034


    Modulo 52 ($34 in $108 und $10a) bedeutet, dass du 416 Pixel draufrechnen musst, macht dann eine horizontale Auflösung deines Bildes von 784 Pixel.
    Die vertikale Auflösung sollte eigentlich 72 Pixel sein, wenn ich die Werte noch richtig interpretiere (-> DIWSTOP V9 -> 9x8=72). Wenn ich die 7644 Byte pro Bitplane durch die horizontale Auflösung teile, komme ich aber auch auf 78 Pixel vertikal...

  • Tja für mich selber nicht so einfach, soweit reichte mein Wissen über die DIWSTART/STOP Werte usw. noch nicht. Ich muss mich da erst mehr einlesen was ich auch tun wollte, ich zweifelte auch ob gewisse Werte in Bytes oder vielleicht in Words angegeben sind.
    Deswegen hatte ich ja weiter oben den Copper-Auszug reingestellt in der Hoffnung das hier welch Profi was raussieht, war auch so nur wie es aussieht zu spät. Die "praktische" Lösung kam zuvor. ^^
    Danke aber auch für diese Aufklärung.

  • @Quietschbeu, ich könnte das jetzt schon mal nochmal genau testen aber hab ja schon ein Logo schnell hingekritzelt und mit 78 Vertikal definiert und im Demo dann laufen lassen , so wars ok.
    Ich kann ja auf dem Amiga mit dem Prog IFFMAster raw Dateien einladen dann muss man aber die Auflösung angeben damit man es auch korrekt sieht. Hab dann mal 784X72 versucht beim originalen Logo das bei war , da scheinen dann die einzelnen Bitplanes verschoben zu sein, mach ich 78 sieht es dann korrekt aus.


    Was mir aber noch wichtiger ist:
    Ich hab mich jetzt mal eingelesen und jetzt auch verstanden wie man die Breite aus den Werten rausrechnet samt Modulo.
    Was mir aber noch ein Rätsel ist, ist das Vertikale: wieso eigentlich 9 X 8 ?? Könntest mir das näher erklären, da hab ich noch nichts verständliches gefunden.

  • Bei der vertikalen Größe/Interpretation von DIWSTOP hatte ich mich leider vertan. Ich hatte, wie bei der Breite, mit 8 Bit multipliziert, was an der Stelle wirklich Quatsch ist. Sorry, ist schon etwas länger her, dass ich mich damit beschäftigt hatte. ^^


    Um die Größe des Logos herauszufinden, muss man sich das gesamte Programm ansehen; DIWSTART und DIWSTOP alleine reichen nicht:
    - Falls die Bitplanes einfach hintereinander im Speicher liegen oder am Stück irgendwo hin kopiert werden, dann kannst du davon ausgehen, dass das Logo genauso breit ist, wie dein gesamter Screen (sichtbarer + unsichtbarer Bereich). Dieser Fall liegt bei dir vor. Die Breite kannst du also aus DIWSTART und DIWSTOP berechnen.
    - Falls das Logo kleiner ist als der gesamte Screen, dann werden einzelne Zeilen in den Screen kopiert und anhand der Kopierschleife kannst du die Breite errechnen.
    - Die vertikale Größe kannst du dann berechnen, indem du die Gesamtgröße der RAW-Datei durch die Anzahl der Bitplanes teilst und das Ergebnis dann durch die Breite des Logos in Byte. Dazu dürfen in der Raw-Datei aber keine Paletteninformationen enthalten sein, was je nach Konverter vorkommen kann. In deinem Fall wäre das 22932/3 = 7644 Byte pro Bitplane. 7644/( 784/8 ) = 78 Zeilen.

  • Ja hast Recht, genau so war es in diesem Fall auch.
    Logo wird als RAW eingeladen, Bitplanes liegen somit dann auch hintereinander an der eingeladenen Adresse. Farben hängen keine dran, die 8 Farben (3 Bitplanes) wurden fix in der Copperliste definiert. Die Farben kann man wenn nötig bequem auch im IFFMaster Programm einfach in den Einstellungen beim Speichern weglassen sollten sie vorhanden sein.


    Ich danke dir für die Info wie man jetzt den Vertikalen Wert errechnet, jetzt weis ich da auch Bescheid.
    Beim horizontalen Wert bin ich meiner Meinung nach einen ziemlich verrückten Weg gegangen der aber funktioniert.


    Könntest mir noch zum Vergleich ein Beispiel vorzeigen wie du das mit dem Horizontalen Wert gemacht hast.?


    Selber bin ich folgend auf den horizontalen Wert gekommen, dabei war folgende Angabe im Netz hilfreich:



    Hier nochmal meine Werte:


    Code
    1. ; DIWSTRT=$1961(V25,H97) --- DIWSTOP = $09D1(V9,H209) DC.L $008E1961,$009009d1,$01040000


    Kurz beschrieben hab ich dann folgendes gemacht:


    255+1+209-97 = 368 ; 97 abgezogen da H bei 97 startet, grün bezieht sich auf Text oben.


    schliesslich 368 + Modulo (52 * 8 = 416) total 784 Pixel



    Ich schätz mal deine Rechnung sieht anders aus. ^^









  • Meine Rechnung sieht genauso aus, nur hexadezimal. Auf den horizontalen DIWSTOP-Wert muss mann $100 addieren (Erklärung steht im Hardware Reference Manual) und dann den horizontalen DIWSTART Wert abziehen:

    Code
    1. Hex: $D1+$100-$61=$170
    2. Dez: 209+256-97=368


    Und dann den 8-fachen Modulo Wert dazu addieren. Du hast das also genau richtig gemacht.