C Image Hardcoded

Thomas95

Cadet 3rd Year
Registriert
Dez. 2012
Beiträge
46
Hey :)

Ich übersetze gerade ein Programm von C# auf C und stehe gerade vor einem Problem.

Ich möchte ein Bild (jpg) hardcoded in meinem Programm haben um es beim danach auf die Festplatte zu schreiben, wie mache ich das am besten in C?

In C# habe ich dies so implementiert:
Code:
string bild = "/9j/4AAQSkZJRgA...";

public Image StringToImage()
{
 byte[] array = Convert.FromBase64String(bild);
 Image image = Image.FromStream(new MemoryStream(array));
 return image;
}

public void save(string path)
{
 Image image = StringToImage();
 image.Save(path + "\\test.jpg");
}

Hat jemand eine Idee wie ich dies in C realisiere?
Gibt es hierfür eine C Library?

MfG Thomas :)
 
Anderer Gedankengang ohne Base64:

Speicher dein Bild als Byte-Array. Dann brauchst du keine Bibliothek um Base64 zu dekodieren.

Beispiel:
Code:
unsigned char myImage[] = { 0x11, 0x32, 0x33 };

Dann brauchst du die Bytes nur noch auf die Festplatte schreiben.

// EDIT: Aufgrund der Empfehlungen aktualisiert (char => unsigned char)
 
Zuletzt bearbeitet:
OpenCV hat nicht nur C++ sondern auch C als API. Dh du kannst ganze Bildverarbeitungssachen darüber in C programmieren. Dazu gehört natürlich auch eine Bilddatei von Festplatte zu laden oder dort hin zu speichern.
 
Unter Windows kannst du es auch als Ressource ins Binary einbauen. Ansonsten das, was Ocram1992 sagt.
 
Ocram1992 schrieb:
Anderer Gedankengang ohne Base64:

Speicher dein Bild als Byte-Array. Dann brauchst du keine Bibliothek um Base64 zu dekodieren.

Beispiel:
Code:
char myImage[] = { 0x11, 0x32, 0x33 };

Dann brauchst du die Bytes nur noch auf die Festplatte schreiben.

Für Bytes ist man mit unsigned int immer auf der sichereren Seite, da die Vorzeichenhaftigkeit (ist das ein Wort? wie nennt man das im Deutschen?) von char compilerabhängig ist und es bei einigen bit-Operationen Probleme geben kann, wenn der Operand vorzeichenbehafet ist.
 
Nur dass du bei unsigned int sizeof(unsigned int) mal so viel Speicher belegst, der überhaupt nicht verwendet wird, aber vom Compiler nicht wegoptimiert werden kann. Du hast natürlich recht, dass char eine schlechte Wahl ist, aber unsigned char ist die weit bessere Wahl als unsigned int und bietet die gleichen Vorteile.

Gruß
BlackMark
 
BlackMark schrieb:
Nur dass du bei unsigned int sizeof(unsigned int) mal so viel Speicher belegst, der überhaupt nicht verwendet wird, aber vom Compiler nicht wegoptimiert werden kann. Du hast natürlich recht, dass char eine schlechte Wahl ist, aber unsigned char ist die weit bessere Wahl als unsigned int und bietet die gleichen Vorteile.

Gruß
BlackMark

Meh, Hirnfurz. Ich meinte natürlich unsigned char, sorry.
 
Zurück
Oben