MoinMoin,
irgendwie blick ich grad nich durch.... Folgende Situation:
Ich hab ein bmp-Bild von nem Online Gedöns in ein Array von 8bit/byte
umwandeln lassen. Das hat auch super geklappt. Das Bild hat 12*65 Pixel
zu je 8bit Rot, 8bit Grün und 8bit Blau.
Wenn ich dass Bild dann darstellen lasse, kommt auch genau das raus, was
ich vorher in Paint gemalt hab.
1 | while (Y < 65)
|
2 | {
|
3 | while (X < 12)
|
4 | {
|
5 | BSP_LCD_DrawPixel( X, Y, ( 0xFF000000 + (Bild_8b[i] << 16) + (Bild_8b[i+1] << 8) + (Bild_8b[i+2]) ) );
|
6 | X++;
|
7 | i +=3;
|
8 | }
|
9 | X = 0;
|
10 | Y++;
|
11 | }
|
12 | Y = 0;
|
13 | i = 0;
|
Nun lasse ich folgende Zeilen auf das Array los:
1 | void Convert_8bTo32b(uint8_t *Bild_8b, uint32_t *Bild_32b, uint32_t Size)
|
2 | {
|
3 | uint32_t i = 0;
|
4 | uint32_t X = 0;
|
5 |
|
6 | while (X < Size/4)
|
7 | {
|
8 | *( Bild_32b + X ) = ( 0xFF000000 + ( *(Bild_8b + i) << 16 ) + ( *(Bild_8b + i + 1) << 8 ) + ( *(Bild_8b + i + 2) ) );
|
9 | i += 3;
|
10 | X++;
|
11 | }
|
12 |
|
13 | }
|
damit mir daraus ein Array von 32bit/"byte"-Werten gemacht wird. Weil
wegen ARGB.
Wenn ich das 32bit-Array dann darstellen lasse:
1 | while (Y < 65)
|
2 | {
|
3 | while (X < 12)
|
4 | {
|
5 | BSP_LCD_DrawPixel(X, Y, (*(Bild_32b + (X*Y) + X )));
|
6 | X++;
|
7 | }
|
8 | X = 0;
|
9 | Y++;
|
10 | }
|
11 | Y = 0;
|
kommen höchst interesaante Muster bei raus, aber nicht mein kleines
häßliches Männchen...
Bilder muss ich gleich extra anhängen, irgendwie will mein Handy grad
nicht mit meinem Laptop reden ?!?!
Ich hab mir auch schon im SingleStep Modus die Arrays anzeigen lassen,
die Konvertierung scheint so weit richtig zu sein, die ersten zig paar
Werte und ein paar Stichproben haben jeweils richtige Werte ergeben.
Andrerseits hat mir das Konstrukt für die 32bit-Arrays bisher auch immer
treue Dienste geleistet und nicht hübsche Muster gezaubert.
Findet jdm auf die Schnelle nen Fehler?
1 | ( 0xFF000000 + ( *(Bild_8b + i) << 16 ) + ( *(Bild_8b + i + 1) << 8 ) + ( *(Bild_8b + i + 2) ) );
|
und
1 | ( X, Y, ( 0xFF000000 + (Bild_8b[i] << 16) + (Bild_8b[i+1] << 8) + (Bild_8b[i+2]) ) );
|
sollte doch die selben Elemente ansprechen/auslesen, wenn ich vorher den
Pointer Bild_8bPt = &Bild[0] setze?
mit verwirrten Grüßen,
Chaos