AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem beim laden einer LCD Animation als Bitmap
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim laden einer LCD Animation als Bitmap

Ein Thema von scp · begonnen am 11. Apr 2006 · letzter Beitrag vom 11. Apr 2006
Antwort Antwort
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#1

Problem beim laden einer LCD Animation als Bitmap

  Alt 11. Apr 2006, 00:40
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:
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;
Dann folgen die Daten, in meinem Fall haben die Bilder immer eine Auflösung von
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.
Angehängte Dateien
Dateityp: zip testlcdani_547.zip (45,9 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Problem beim laden einer LCD Animation als Bitmap

  Alt 11. Apr 2006, 01:17
Habs doch noch gefunden :
Delphi-Quellcode:
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;
Quelle:
http://cvs.tuxbox.org/cgi-bin/viewcv...tapps/bmp2raw/
(aus packed2raw() in raw.c)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz