UpdateLayerdWindow und Textausgabe

03/07/2012 - 16:33 von Heinz-Mario Frühbeis | Report spam
Hallo!

Die GDI-Funktionen scheinen wohl visuell nicht zu funktionieren und bei GDI+
finde ich keine Textausgabe.
Habt ihr denn mal vllt. Tipps für mich, wie eine Textausgabe bei
UpdateLayerdWindow funktioniert?

Mit Gruß
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Schmidt
03/07/2012 - 17:39 | Warnen spam
Am 03.07.2012 16:33, schrieb Heinz-Mario Frühbeis:
Hallo!

Die GDI-Funktionen scheinen wohl visuell nicht zu funktionieren
und bei GDI+ finde ich keine Textausgabe.
Habt ihr denn mal vllt. Tipps für mich, wie eine Textausgabe bei
UpdateLayerdWindow funktioniert?



Sobald Du mit Transparenzen (bzw. DIBs mit 32Bit BGRA) arbeitest,
muss die Textausgabe prizipiell ebenfalls das Alpha-Byte unterstützen.
Und das tun die GDI-Text-Funktionen nicht (die setzen, beim
Arbeiten gegen eine 32Bit-DIB, die zu den jeweils gerenderten
Glyph-Pixeln gehörigen Alpha-Bytes auf 0, überschreiben also
die dort eventuell bereits vorhandenen Alpha-Infos...)
und sorgen so für "volle Transparenz" des ausgegebenen Texts,
sobald eine solche 32Bit-DIB dann in einem layered Alpha-Kontext
gerendert wird - und nicht in einem "normalen GDI-Kontext"
(wo der Alpha-Kanal im Falle von 32Bit-DIBs ignoriert wird).

Also bleibt GDI+ für alpha-fàhige Text-Ausgaben (DrawString) -
oder auch cairo...;-)

Eventuell tut es (als WorkAround) auch ein Zwischen-
Puffern der aktuellen Hintergrund-Bitmap in einem temporàren
32Bit-DIB/hDC "Streifen" - gegen den dann die normalen
GDI-TextOuts abgefahren werden - und den Du danach aber
wieder zurück blitten musst auf Deinen eigentlichen
Alpha-BackBuffer - aber auch bei dieser Variante müsstest Du
acht geben auf Deinen Alpha-Kanal, der vor oder auch nach dem
zurückblitten des temporàren "Text-Streifens" wieder restauriert
werden sollte. Also ohne spezielles Loopen über die Pixel-Bytes
Deines Temp-Buffers geht es bei Verwendung von GDI nicht ab.

Ein kleines Beispiel für Dein layered (TextOut-)Szenario wàre
vielleicht nicht schlecht.

Olaf

Ähnliche fragen