![]() |
Problem beim laden einer LCD Animation als Bitmap
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mal versucht ein Dateiformat einzulesen und auf die Pixels eines Bitmaps zu übertragen.
Das geht in diesem Fall recht einfach, da die Datei ähnlich wie ein monochromes Bitmap aufgebaut ist. Die Datei hat einen Header von 16 Byte:
Delphi-Quellcode:
Dann folgen die Daten, in meinem Fall haben die Bilder immer eine Auflösung von
type
ani_header = packed record Magic: DWORD; // Immer "LCDA" = $4144434C Format: Word; // Zurzeit einfach 0000 Width: Word; // Breite Einzelbild Height: Word; // Höhe Einzelbild Count: Word; // Anzahl Einzelbilder Delay: DWORD; // Veruögerung der Einzelbilder in Mikrosekunden (1 Millionenstel Sek.) end; 120x64 Pixel = 120 Spalten x 8 Zeilen x 8 Bit = 960 Byte Soweit, sogut. Habe auch schon Code zum Übertragen auf die Pixelmatrix, aber irgendwas stimmt nicht. In Zeile 8, Zeile 16, 24 usw. sind immer alle Pixel 1 = hell, was eine Streifen im Bild verursacht, hat einer ne Idee warum? Anbei ein Testprojekt. PS: Es geht im Prinzip nur um den Code von LoadLCDAniFromStream(), der Rest ist nur zum testen. PPS: Die Bilder an sich sind grobkörnig, weil monochrom, die Streifen sind trotzdem gut zu erkennen, z.B. bei Bild 14. |
Re: Problem beim laden einer LCD Animation als Bitmap
Habs doch noch gefunden :-) :
Delphi-Quellcode:
Quelle:
procedure LoadLCDAniFromStream(Stream: TStream; index: integer; Bmp: TBitmap);
var LCDAHeader: TLCDAHeader; buf: packed array[0..LCD_ROWS-1,0..LCD_COLS-1] Of Byte; pix: Word; x,y: integer; begin If (Stream.Size >= SizeOf(LCDAHeader)+index*LCD_BUFFER_SIZE) then begin Stream.Read(LCDAHeader, SizeOf(LCDAHeader)); Stream.Seek((index-1)*SizeOf(buf), soFromCurrent); Stream.Read(buf, SizeOf(buf)); for y := 0 to LCD_ROWS*8-1 do for x := 0 to LCD_COLS-1 do begin pix := (buf[y shr 3][x] shr (y and 7)) and 1; If Pix = 0 then Bmp.Canvas.Pixels[x, y] := clLCDBack else Bmp.Canvas.Pixels[x, y] := clLCDFront; end; end; end; ![]() (aus packed2raw() in raw.c) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz