Hallo Forum, ich habe bisher ein Display mit einem SSD1298 Controller über den FSMC eines STM32F4 angesprochen. Wenn ich einer Grafik Text überlagern möchte, dann habe ich mittels WriteData den Pixel gesetzt oder alternativ per ReadData einen Pixel übersprungen. So war es mir einfach Text auf beliebigem Hintergrund darzustellen. Nun portiere ich derzeit den Code für den SSD1964. Bei diesem Display muss ich festlegen, ob ich Daten lesen oder schreiben will. (8080 Bus). Weiß der Teufel, warum ich den Chip vorher umschalten muss und nicht einfach bei Read / Write auf den Display-Ram zugreifen kann. Da ich wohl kaum der erste bin, der sich mit dieser Thematik beschäftigt, frage ich hier mal, was die gängiste Methode ist, Text auf einem beliebigem Hintergrund darzustellen, also wie kann ich Pixel am einfachsten / schnellsten überspringen, die nicht gesetzt werden sollen?! Vielen Dank!
Hallo,
ich hatte das mal so gemacht.
// Write pixel to screen
for(stretchX=0; stretchX<stretch; stretchX++){
#ifdef USE_TRANSPARENT_COLOR
if (!((GetTransparentColor() == GetColor()) &&
(GetTransparentColorStatus() == TRANSPARENT_COLOR_ENABLE)))
#endif
WriteData(_color);
else _address++;//wenn Transparenter Pixel erkannt, adresse
hochzählen...
}
Dabei erhöhe ich meine PMP Speicheradresse, ohne den RAM an der Stelle,
wo der Transparente Pixel erkannt wurde, zu beschreiben, wenn ein
Transparenter Pixel erkannt wurde. Ka ob das auch anders geht.
(PMP Adressiert Frame Buffer)
Vielen Dank! Ich habe es jetzt ähnlich gelöst:
1 | // Char bitmap
|
2 | writeMode = DISABLE; |
3 | for (w = 0; w < fWidth; w++) |
4 | {
|
5 | if ((w & 0x07) == 0) { c = *fBitmap++; } |
6 | if (((c & 0x80) == 0) && (text->backColor == COLOR_TRANSPARENT)) { writeMode = DISABLE; } |
7 | else
|
8 | {
|
9 | if (!writeMode) |
10 | {
|
11 | writeMode = ENABLE; |
12 | TftSetAddressBox(tX + w, tY + h, TFT_SIZEX - tX - w, 1); |
13 | }
|
14 | |
15 | if (c & 0x80) TftWriteData(text->foreColor); |
16 | else TftWriteData(text->backColor); |
17 | }
|
18 | c <<= 1; |
19 | }
|
Kerngedanke ist, dass ich, sobald ein Transparenter Pixel erkannt wurde, diese überspringe und mir mittels "writeMode" merke, dass die Adressbox, also der Bereich auf dem Display, welches beschrieben wird, neu eingerichtet werden muss. Dadurch brauche ich nur dann den Bereich noch initiieren, wenn zwischen Normalem Pixel und transparentem Pixel gewechselt wird. Genau so mache ich es nun auch mit Grafiken. Die Performance ist eigentlich sehr gut, so dass ich trotzdem noch ein komplettes 800x480 Bild aufbauen kann, ohne dass eine Verarbeitungszeit zu erkennen ist. Fabian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.