Lauftext mit "maskiertem" Text vor Picturebox

30/09/2008 - 18:24 von Wolfgang Bußmann | Report spam
Hallo Newsgroup,

ich bitte meinen evtl. etwas "unklaren" Betreff vorab zu entschuldigen,
aber ich möchte gerne folgendes erreichen.

Grundlage:

1. "größeres" Picture mit einem Hintergrundbild

2. "kleineres" Picture zur Aufnahme von Laufschrift.

3. "schnelle" Kopie des kleineren Pictures an eine beliebige Stelle des
größeren Picture. (Für die Laufschrift.)

3.a. Bei dieser Kopie soll aber nur der reine Text, nicht der
Hintergrund des kleinen Pictures übertragen werden. (Maskierung?)

4. Das Hintergrundbild des größeren Picture kann wàhrend des Ablaufes
der Laufschrift wechseln.

Die reine Laufschrift in der kleinen Picturebox und das Kopieren der
kompletten Picturebox in die große Picturebox làuft bereits ganz gut.
Leider hapert es noch etwas an der Geschwindigkeit. Auch hier wàre ich
für einen Tipp dankbar.

Meine Fragen:
1. Wie kann ich nur den reinen Text "maskieren" und übertragen.
2. Kann ich mir die zweite Picturebox für die Laufschrift evtl. ganz
sparen und direkt in die erste Picturebox "schreiben"?

Durch "Googlen" habe ich bereits mehrere Infos zum "Maskieren" gefunden,
aber diese beziehen sich meist auf "starre" Bilder. Ist so etwas mit
einem Text nicht auch möglich? Ein weiteres Problem ist noch, dass
dieses Maskieren und "Übertragen" wegen der Laufschrift möglichst
schnell gegen sollte.

Ich wàre am Anfang schon über einen "Codeschnipsel" für das "Maskieren"
und "Kopieren" von Text sehr dankbar.

Vielen Dank für Eure Bemühungen.

Gruß Wolfgang
 

Lesen sie die antworten

#1 Thorsten Albers
30/09/2008 - 22:18 | Warnen spam
Wolfgang Bußmann schrieb im Beitrag
<#...
Meine Fragen:
1. Wie kann ich nur den reinen Text "maskieren" und übertragen.
2. Kann ich mir die zweite Picturebox für die Laufschrift evtl. ganz
sparen und direkt in die erste Picturebox "schreiben"?



In Fàllen, in denen es auf die Geschwindigkeit ankommt, sollte die
Maskierung bereits vor dem Beginn der Aktion durchgeführt sein, das
Maskieren zur 'Laufzeit' wird zu zeitaufwendig. Schaue Dir 'mal Spiele an,
bei welchen es auf Schnelligkeit ankommt: Dort wird in der Regel - hàufig
in einer eigenen Datei einsehbar - ein Bitmap-Font mitgeliefert, dessen
Zeichen zur Darstellung auf dem Bildschirm verwendet werden.
Vom 'Schreiben' des Textes in die Ziel-PictureBox zur 'Laufzeit' ist ganz
abzuraten, da die Schreib-Prozeduren zu langsam sind: Zum einen erledigt
jede Schreib-Prozedur (wie z.B. Print) noch zusàtzliche Aufgaben, die in
Deinem Fall überflüssig sind, zum anderen muß jedes Zeichen der Schriftart
gerastert (d.h. von Vektoren in Pixel umgerechnet) werden, bevor das
Zeichen ausgegeben wird. Letztes ist allerdings nur die halbe Wahrheit:
Windows hàlt einmal gerasterte Zeichen für einen gewissen Zeitraum in einem
Cache vor, so daß, bei günstiger Zeichenverteilung, das Rastern eventuell
entfallen kann. Dennoch bleibt die Methode zu langsam.

Schematisch könnte das ganze so aussehen:

- H: PictureBox mit Hintergrund-Bild
- C: PictureBox mit 'kolorierten' Schriftzeichen, d.h. Vordergund (Pixel
des eigtl. Zeichens) im endgültigen Erscheinungsbild und Hintergrund (Pixel
ausserhalb des eigtl. Zeichens) weiß
- M: PictureBox mit maskierten Schriftzeichen, d.h. Vordergrund (Pixel des
eigtl. Zeichens) schwarz und Hintergrund (Pixel ausserhalb des eigtl.
Zeichens) weiß
- A: PictureBox für Ausgabe

(1. Hintergrund aus H mit BitBlt() und vbSrcCopy in A kopieren)
2. Maskiertes Zeichen aus M mit BitBlt() und vbSrcAnd in A kopieren
Dadurch werden alle Pixel des Zeichens aus M in A auf schwarz gelöscht;
alle Pixel ausserhalb des Zeichens bleiben erhalten.
3. 'Koloriertes Zeichen' aus C mit BitBlt() und vbSrcPaint in A kopieren
Dadurch werden alle Pixel des Zeichens in A auf die Pixel des Zeichens aus
C gesetzt; alle Pixel ausserhalb des Zeichens bleiben erhalten.

Natürlich làßt sich da an verschiedenen Stellen optimieren. So könntest Du
für H, C und M statt VB-PictureBoxen Speicher-Geràtekontexte verwenden
(CreateCompatibleDC()), das spart Ressourcen und ist möglw. schneller.

-
Thorsten Albers albers(a)uni-freiburg.de
-

Ähnliche fragen