amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Amiga, AmigaOS 4 > Bild aus struct Image + UWORD *ImageData in Malprogramm laden - wie? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

23.09.2019, 00:47 Uhr

Reth
Posts: 1746
Nutzer
Hallo zusammen,

kurze Frage dazu: Kann man das irgendwie bewerkstelligen?
Habe z.B. ne Struct Image und das UWORD-Array dazu. Hab schon versucht, das Ganze in ArtPro zu laden (mit RAW oder Chunky Loader) - leider erfolglos.

Ich bräuchte das Bild wieder in einem Malprogramm, so dass ich es abändern kann.

Gibt es da eine Möglichkeit, dies aus den reinen "Programmier-Bilddaten" zu bewerkstelligen?

Dank euch schon mal!

Ciao

[ - Antworten - Zitieren - Direktlink - ]

23.09.2019, 10:06 Uhr

thomas
Posts: 7647
Nutzer
Naja, man könnte das Bild einfach in ein Fenster malen und dann einen Screenshot machen. Das wäre die Dummy-Methode.

Besser wäre ein kleines Programm, das die Daten als IFF ILBM abspeichert. Ist auch keine Magie.

Da ist ein Beispiel: http://thomas-rapp.homepage.t-online.de/examples/saveimage.lha


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/


[ Dieser Beitrag wurde von thomas am 23.09.2019 um 11:17 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

23.09.2019, 12:21 Uhr

jolo
Posts: 105
Nutzer
@Reth

Da Du ein 16-Bit-Array hast (ich hoffe in Form eines Quellcodes!), hast Du schon einmal die Daten, also müsste ein RAW-Loader die Grafik unter Falschfarben schon darstellen können, sofern die Breite als Mehrfaches von 16 von Dir spezifiziert wurde und "PlaneOnOff" nicht benutzt wurde.

Breite (in Pixels) PLUS 15 AND -16 = tatsächliche Breite (mehrfaches von 16 ('WORD aligned'))
Höhe, bleibt Höhe

Beispiel:

(49 Pixels + 15) & -16 = 64 (tatsächliche Breite)

In der Shell kann man das kurz errechnen:

1> eval 49 + 15 & -16

Da ein "Image" nichts über Farben aussagt, musst Du aber im Programm nachschauen, welche Farben benutzt wurden.

Ein "Image" ist meist aber ein platzsparendes Format, in welchen nur Daten einfließen, die für eine gesamte "Bitplane" nicht null oder eins sind.

Bei einem einfarbigen "Image" wäre "PlanePick" 1 und "PlaneOnOff" 0, bei einem zweifarbigen "Image" aber "PlanePick" 3 und "PlaneOnOff" 0, sofern Du alle vier Farbstifte für die Grafik verwendest. Verwendest Du aber nur die Farbstifte eins und drei, dann wäre "PlanePick" 2 und "PlaneOnOff" 1, wobei nur eine "Bitplane" durch "ImageData" abgedeckt werden müsste.

PlanePick = 2 (Daten für Bitplane 1 (%10) kommen aus "ImageData", Daten für "Bitplane" 0 (%01) sind nicht spezifiziert)
PlaneOnOff = 1 (setze alle Bits der "Bitplane" 0 (%01) auf eins)

heißt, eine 2 "Bitplane" aka 4 Farb-Grafik, wobei alle Bits der "Bitplane" 0 auf eins gesetzt werden, und nur "Bitplane" 1 die eigentlichen Daten enthält (Bit in "PlanePick" ist gesetzt aber Bit in "PlaneOnOff" gelöscht, so dass hier die tatsächlichen Daten aus "ImageData" gelesen werden müssen).

Für eine 8-Farben-Grafik, wobei alle Daten aus "ImageData" entnommen werden müssten, würde
PlanePick : 7 (%111) ("Bitplane 2, 1 und 0 gesetzt)
PlaneOnOff : 0 (%000) (keine einzige "Bitplane" von vornherein eingefärbt)
sein.


Für AdPro müsstest Du die "ImageData" Daten aber ohne die "Image Struct" als Binärformat aufbereiten, anhand von "PlanePick" und "PlaneOnOff", und dann sichern um diese dann wiederum als RAW einladen.

Ich würde aber vorschlagen, ein Programm zu schreiben, das die ASCII-Daten ausliest und als "Brush" speichert - inklusive fest verankerter Farben des Programms - ist einfacher.

Noch einfacher ist es aber, das Programm zu kompilieren und auszuführen um dann mittels AdPro die Grafik aus dem laufenden Programm zu übernehmen (Screenshot) - also die Dummy-Methode, wie von Thomas vorgeschlagen.

Anbei, Thomas, bist Du auf "PlanePick/PlaneOnOff" in Deinem Beispiel eingegangen?
Ich habe schon häufiger Quelltexte gesehen, die immer nur anhand von "Image Depth" die Daten speicherten, was oft nur Müll ergibt.


Grüße

[ - Antworten - Zitieren - Direktlink - ]

23.09.2019, 20:02 Uhr

Reth
Posts: 1746
Nutzer
Vielen Dank zusammen!

@Thomas: Uff, für so ne Art von Source bin ich zuwenig C-Profi, Amiga-Profi und Bildformatprofi! Sowas würd ich wenn überhaupt nur in ganz anderer Form hinbekommen ...
(Muss gestehen, dass mir z.B. nicht klar ist, was die bitweise Verschiebung und Veroderung der Buchstaben bei den #defines bedeutet, noch, wie diese dann in der entsprechenden struct wirken.)

Die C-Daten der Bilder sind m.W. mit ArtPro generiert worden. Bei viel Glück liegen die Bilder noch auf meinen alten Rechnern vergraben (komm ich derzeit aber nicht ran ...)

[ - Antworten - Zitieren - Direktlink - ]

24.09.2019, 18:44 Uhr

thomas
Posts: 7647
Nutzer
@Reth:

Du musst ja nicht das ganze Programm verstehen, sondern nur wie man es benutzt.

Lade das Archiv nochmal herunter. Ich habe das Programm jetzt so aufgeteilt, dass du die Details beiseite lassen kannst.

Du musst nur das main.c verstehen und anpassen. Da wird zunächst die Image-Datei hand.c eingefügt. Diese enthält das struct Image, die UWORD Daten und die Palette als ULONG-Array.

In main.c musst du den Dateinamen der Image-Datei (hand.c) anpassen, den Namen der Zieldatei (hand.iff) und die Variablennamen
hand = ein Zeiger auf die struct Image;
handPaletteRGB32 = der Name der Palette.
Wenn du keine Palette hast, kannst du da NULL reinschreiben. Dann wird eine Standardpalette gespeichert. Die passt zwar nicht zum Bild, ist aber besser als alles schwarz.

Falls du nicht vbcc als Compiler benutzt, musst du am Anfang des makefile noch den Namen des Compilers ändern.


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Amiga, AmigaOS 4 > Bild aus struct Image + UWORD *ImageData in Malprogramm laden - wie? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1997-2019 by amiga-news.de - alle Rechte vorbehalten.
.