Einzelnen Beitrag anzeigen

Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Bitmap als Pointer auf einem Display ausgeben

  Alt 31. Mär 2006, 19:17
Soeben beim ändern der Bitmapgrösse wird das bitmap nicht mehr richtig dargestellt. ändere ich manuell den Wert des BMPdataWidth wird das Bild wieder richtig dargestellt. Je nach Grösse des Bitmaps ändert sich auch der Wert der zu BMPdatawidth addiert werden muss.

Hab mal grob rumgespielt. Wenn das Bitmap ne Breite von 200 hat liegt der Wert ca. bei 224.
Ist das Bitmap 100 Breit liegt der Wert bei ca. 130.

Hier mal der Auszug aus der Dokumentation:

Code:
LUI_Bitmap
Beschreibung:
Lädt die übergebenen Bild-Daten in den entsprechenden Grafik-Screen.
Syntax:
ErrorCode LUI_Bitmap (int DevNum, unsigned char ScreenNr, int ScreenPosX,
int ScreenPosY, int BMPoffsetX, int BMPoffsetY,
int BMPWidth, int BMPHight, int BMPdataWidth,
int BMPdataHight, unsigned char *Bitmap)
Code:
Parameter:
DevNum: Index des Gerätes (0…3)

ScreenNr: Grafik-Screennummer (0,1)

ScreenPosX: X-Koordinate der linken oberen Ecke des auszugebenden Bitmaps auf dem LCD

ScreenPosY: Y-Koordinate der linken oberen Ecke des auszugebenden Bitmaps auf dem LCD

BMPoffsetX: X-Offset der linken oberen Ecke des auszugebenden Bitmaps innerhalb der Bitmap-Daten (z.B. um nur einen Teilbereich eines Bitmaps auf dem LCD auszugeben)

BMPoffsetY: Y-Offset der linken oberen Ecke des auszugebenden Bitmaps innerhalb der Bitmap-Daten (z.B. um nur einen Teilbereich eines Bitmaps auf dem LCD auszugeben)

BMPWidth: Breite des auszugebenden Bitmaps

BMPHight: Höhe des auszugebenden Bitmaps

BMPdataWidth: Breite der gesamten Bitmap-Daten in Pixel

BMPdataHight: Höhe der gesamten Bitmap-Daten in Pixel

Bitmap: Zeiger auf Array mit Bitmap-Daten


Beispiel:
unsigned char ErrorCode;
int DevNum=0;
unsigned char BMPData[9600];
//BMPData[9600] mit Bitmapdaten laden (schwarz/weiß), z.B. Hintergrundbild 320x240
//…
ErrorCode = LUI_Bitmap (DevNum, 0, 0, 0, 0, 0, 320, 240, 320, 240, BMPData);
if (ErrorCode)
{
//Fehlercode auswerten, Fehlerbehandlung
}
else
{
//Bitmap (in diesem Beispiel full screen 320x240=9600Byte) wurde an Position x=0 und y=0, mit
einer Breite von 320 Pixel und eine Höhe von 240 Pixel in Grafik-Screen Nummer Null geladen.
Da das ganze Bitmap geladen werden sollte, sind BMPoffsetX und BMPoffsetY gleich Null.
}
//BMPData[9600] mit Bitmapdaten laden (schwarz/weiß), z.B. ein 320x240 Pixel Bitmap mit kleineren
//Grafiken für Animationen
//…
ErrorCode = LUI_Bitmap (DevNum, 1, 50, 30, 10, 15, 25, 25, 320, 240, BMPData);
if (ErrorCode)
{
//Fehlercode auswerten, Fehlerbehandlung
}
else
{
// Ein kleines Bitmap wurde an Position x=50 und y=40, mit einer Breite von 25 Pixel und eine
Höhe von 25 Pixel in Grafik-Screen Nummer 1 geladen. Das kleine Bitmap hat innerhalb des
gesamten Bitmaps die Position x=10 und y=15 (BMPoffsetX=10 und BMPoffsetY=15). Das kleine
25x25 Pixel Bitmap wurde quasi aus dem großen 320x240 Pixel Bitmap (BMPData -Array) an der
Position x=10, y=15 “ausgeschnitten” und auf dem LCD an der Position x=50, y=30 eingefügt.
}
Könnte mir jemand helfen, was es mit dem Wert auf sich hat?


Zitat von Der_Unwissende:
genau so wichtig ist es aber, dass du deinen Zeiger Image nicht unitialisiert übergibst. Der muss auf ein Feld zeigen, dass groß genug ist um alle Pixelinfos der Bitmap aufzunehmen (also Width * Height * PixelFormat in Byte).
Könntest Du mir das bitte etwas genauer erklähren. Habe keine Ahnung von Pointern, da ich sie bisher nie nutzte.

Gruss

Cyberaxx
Daniel
  Mit Zitat antworten Zitat