Hallo zusammen,
ich schreibe gerade ein C++ Tool indem ich ein PNG File einlesen und ein
32Bit Array wandeln kann um es als Textur einbinden zu können im Projekt
meiner Diplomarbeit... Folgendes Problem:
Ich habe die Bilddaten in einem unsigned Byte Array über die DevIL
Library
1 | ILubyte * bytes = ilGetData() ;
|
das das array unsigned is kann ich meines Erachtens nich ändern ohne im
Headerfile rumzupfuschn...
Wichtig: Für die DevIL Lib ist bei mir der UNICODE deaktiviert! Deswegen
hab ich natürlich jetzt wenn ich das in ein file exportier ANSI Code
jaigitt :/
Ich hab nun das Array in einen String gepackt um diesen mit
::MultiByteToWideChar() in UNICODE zu wandeln und dann per ofstream in
ein File zu packen:
1 | //Create Stream for Output and Open File
|
2 | ofstream fp_out;
|
3 | fp_out.open("pngdata.txt", ios::out);
|
4 |
|
5 | //Convert Array to string
|
6 | unsigned char *str;
|
7 | str = new unsigned char[size+1];
|
8 | for(int i = 0; i < size; i++){
|
9 | str[i] = bytes[i];
|
10 | }
|
11 |
|
12 | //Change Array to Unicode
|
13 |
|
14 | BSTR unicodestr = SysAllocStringLen(NULL, size);
|
15 | ::MultiByteToWideChar(CP_ACP, 0, str, size, unicodestr, size);
|
Wenn ich es so mache krieg ich nen Error, da str unsigned char ist aber
vom der Funktion MultiByteToWideChar() als LPCSTR erwartet wird :/
Wenn ich aber mein Byte Array auf einen signed string caste konvertiert
er zwar aber ich bekommen falsche Werte. Das liegt vermutlich daran,
dass ich beim casten von unsigned auf signed negative Werte bekomme, die
dann natürlich über ANSI Tabelle konvertiert quark mit Soße sind :o)
Zum Verständnis allgemein: Im Byte Array bytes[i] befinden sich RGBA
Werte des PNG also zB 0,0,0,255. Was ich am Ende im Textfile haben will
ist folgende Darstellung: 0x000000ff.
Ich hoff es hat vielleicht einer nen Tipp wie ich das Problem lösen
kann, da häng ich grad ziemlich an der Wand :(
Grüße
Max