Forum: PC-Programmierung Bilder umwandeln für C/C++ Code


von epdm (Gast)


Lesenswert?

Hallo,

damit man Bilder mit embedded Systeme auslesen und ausgeben kann, 
sollten diese meines Wissens wie folgt vorliegen:

const UG_U16 logo_bmp[] =
{
  0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 
0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 
0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 
0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xDEDB,
        0xB5B7, 0x94B3,.....0xF79E, 0xF79E, 0xF79E
};


ABER mit welchem Programm macht man diese Umwandlung am besten?


vielen Dank

von Der Andere (Gast)


Lesenswert?

epdm schrieb:
> ABER mit welchem Programm macht man diese Umwandlung am besten?

Mit dem, das du dir schreibst und dann für alle anderen hier 
veröffentlichst.
Hopp, ran an den Speck, trau dich :-)

von NurEinGast (Gast)


Lesenswert?


von Kommandozeile vor dem Frühstück für Alle! (Gast)


Lesenswert?

> ABER mit welchem Programm macht man diese Umwandlung am besten?

Programm?
Mit ein wenig improvisierter Skriptakrobatik aus dem Ärmel auf der 
Kommandozeile!
(bash, Python, Perl, ...)

Wo kommen wir denn hin, wenn wir nur noch auf Mundgerechte 
Fertigprogramme setzen?

von alleg (Gast)


Lesenswert?

mit Gimp. Der kann Export nach C

von Kommandozeile vor dem Frühstück für Alle! (Gast)


Lesenswert?

Ausserdem: ist es nicht öde, den FLASH-Platz mit soviel monotonen Daten 
zu verschwenden?

Hier ist das uC.net Forum (aka "Speicherknauserer"), also sollten doch 
Vorschläge auftauchen, welche mit simplen Funktionen diese Pixeldaten 
aus kürzeren, weniger redundanten const Daten wieder hervorzaubern... 
:-)    (Run length encoded oder so)

von alleg (Gast)


Lesenswert?

>also sollten doch
>Vorschläge auftauchen, welche mit simplen Funktionen diese Pixeldaten
>aus kürzeren, weniger redundanten const Daten wieder hervorzaubern...
>:-)    (Run length encoded oder so)
BMP mit RLE oder PNG oder GIF -> Hexeditor -> Export als C.

von der mechatroniker (Gast)


Lesenswert?

Für eine "interne" Resource würde ich aber auch kein komplettes BMP etc. 
mit allen Headern ablegen. Das scheint der Ursprungspost aber auch nicht 
zu machen, so wie die Hex-Werte aussehen.

von alleg (Gast)


Lesenswert?

Beim BMP sieht man aber mit zusammengekniffen Augen schon an den 
HexWerten, wo Header aufhört und Daten anfangen.

von Eric B. (beric)


Lesenswert?

epdm schrieb:
> damit man Bilder mit embedded Systeme auslesen und ausgeben kann,
> sollten diese meines Wissens wie folgt vorliegen:

Schwachsinn. Das Bild kann man doch binär direkt ins Flash laden! Danach 
braucht man im Programm nur noch die Adresse wo's abgespeichert wurde.

von gnugnu (Gast)


Lesenswert?

epdm schrieb:
> Hallo,
>
> damit man Bilder mit embedded Systeme auslesen und ausgeben kann,
> sollten diese meines Wissens wie folgt vorliegen:
>
> const UG_U16 logo_bmp[] =
> {
>   0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E,
> 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E,
> 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E,
> 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xDEDB,
>         0xB5B7, 0x94B3,.....0xF79E, 0xF79E, 0xF79E
> };
>

neee, nur auf big endian Maschinen... Standardfehler.

von Jack (Gast)


Lesenswert?

Mit
1
xxd -i
Kommt unter anderem mit dem vim Editor.

von Lukas K. (carrotindustries)


Lesenswert?

Wenn's nur ne einmalige Aktion ist: Gimp kann als C-Array exportieren.

von Michael B. (laberkopp)


Lesenswert?

alleg schrieb:
> BMP mit RLE oder PNG oder GIF -> Hexeditor

Ja.

> Hexeditor -> Export als C.

Kaum ein Hexeditor kann das.

von Sven B. (scummos)


Lesenswert?

... man kann doch einfach das Hex kopieren und dann mit jedem beliebigen 
Texteditor " " durch ", 0x" ersetzen ... fertig. Dafür braucht's nun 
wirklich keine extra-Software.

von Εrnst B. (ernst)


Lesenswert?

Du kannst es machen wie die Gründerväter, und dein Bild mit (vermutlich 
fast jeder) Bildverarbeitungssoftware in das XPM-Dateiformat 
konvertieren.

Lohnt natürlich nur, wenn du mit wenigen Farben auskommst.

https://de.wikipedia.org/wiki/X_PixMap

von alleg (Gast)


Lesenswert?

>Kaum ein Hexeditor kann das.
ich hab Bless. Der kann das.

von vn nn (Gast)


Lesenswert?

Kommandozeile vor dem Frühstück für Alle! schrieb:
> Hier ist das uC.net Forum (aka "Speicherknauserer"), also sollten doch
> Vorschläge auftauchen, welche mit simplen Funktionen diese Pixeldaten
> aus kürzeren, weniger redundanten const Daten wieder hervorzaubern...
> :-)    (Run length encoded oder so)

Hatte da mal eine Modifikation von LZ77 geschrieben, optimiert für 
mitkompilierte Daten auf Microcontrollern (sprich Daten sind readonly, 
kein Puffer vorhanden, in dem man das Wörterbuch vorhalten kann, sondern 
Daten werden direkt weg gestreamt). Vielleicht finde ich den Code ja 
noch...

von Thierry (Gast)


Lesenswert?

from PIL import Image, ImageDraw

# Create a blank image with a white background
width, height = 800, 800
img = Image.new('RGB', (width, height), (255, 255, 255))

# Create a draw object
draw = ImageDraw.Draw(img)

# Draw the outline of the elephant's head
draw.ellipse((200, 50, 600, 450), fill=(255, 255, 255), outline=(0, 0, 
0))

# Draw the elephant's ears
draw.polygon([(100, 200), (200, 50), (300, 200)], fill=(0, 0, 0))
draw.polygon([(700, 200), (600, 50), (500, 200)], fill=(0, 0, 0))

# Draw the elephant's eyes
draw.ellipse((250, 150, 350, 250), fill=(0, 0, 0))
draw.ellipse((450, 150, 550, 250), fill=(0, 0, 0))

# Draw the elephant's trunk
draw.polygon([(400, 250), (400, 400), (450, 350)], fill=(0, 0, 0))

# Draw the elephant's legs
draw.rectangle((200, 550, 250, 800), fill=(0, 0, 0))
draw.rectangle((550, 550, 600, 800), fill=(0, 0, 0))

# Draw the soccer ball
draw.ellipse((375, 500, 425, 550), fill=(255, 255, 0))

# Save the image
img.save('elephant_soccer.png')

von walter (Gast)


Lesenswert?

Der Hex-Editor HxD hat auch eine Exportfunktion nach C/C++

von Retrofan (Gast)


Lesenswert?

oder sowas :
https://xprofan.net/intl/de/sdk/xprofan-datengenerator/

der macht es als Longints für einen normalen Speicherbereich.
Das könnte man dann für eigenen Zwecke umfriemeln.

von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

epdm schrieb:
> damit man Bilder mit embedded Systeme auslesen und ausgeben kann,
> sollten diese meines Wissens wie folgt vorliegen:
>
> const UG_U16 logo_bmp[] =
> {

Das ist ja nun eine ziemliche Weile her, aber offensichtlich sind all 
diejenigen, die diesen alten Thread wieder ausgegraben haben, keinen 
Deut klüger geworden. Als ob man durch simples Exportieren von Bytes 
oder LongInts aus einem Hex-Editor  und voranstellen von '0x' die Sache 
lösen kann. Nein, mit sowas kann man sich den Speicherplatz zumüllen, 
aber zum Handhaben von Bildern in einem µC ist all sowas noch nicht 
einmal der Anfang.

In der Zwischenzeit hat es hier in diesem Forum bereits einige Beiträge 
gegeben (ja, auch von mir), wo dieses Problem ordentlich abgehandelt 
worden ist. Offenbar hat all das nichts genützt.

So, wer mit den beiden angehängten Bildern etwas anfangen will, sollte 
die Forensuche benützen.

W.S.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.