Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#4

AW: Transparentes Bitmap verschieben

  Alt 30. Jan 2014, 12:59
Ich hab früher versucht in der Richtung auch was zu erstellen, so dass man das absolute Minimum zeichnen muss, verlor dann aber irgendwann das Interesse es noch weiter zu verfolgen. Was ich aus der Zeit noch weiß ist, dass man nicht so ohne weiteres zwei Grafiken gleichzeitig auf die Leinwand zeichnen kann, ohne dass es flackert. Zumindest dann nicht, wenn sich die Bereiche überschneiden. Überschneiden sie sich nicht, kann man es machen. Überschneiden sie sich, führt das zum flackern.

Somit ist eine temporäre Leinwand nötig auf der zuerst alles gezeichnet wird, was zu zeichnen ist. Um aber nicht auch Bereiche zu zeichnen die sich nicht verändert haben, muss man zuerst die Bereiche berechnen die sich verändert haben. Diese Maske legt man dann über die temporäre Leinwand und zeichnet was zu zeichnen ist. Dann überträgt man das mit der gleichen Maske auf die richtige Leinwand.

Der Grund für den Umweg über die temporäre Leinwand ist klar: zeichnet man alles direkt auf der endgültigen Leinwand, dann flackert es wegen der Überlagerung. Die temporäre Leinwand führt dazu, dass es nur eine einzige Grafik ist die zuletzt übertagen wird. Das ist natürlich ein Mehraufwand, weil man alles zuletzt zwei mal zeichnet, es verhindert aber das flackern bei Überlagerung.

Optimierung bringt dann der Clipping Bereich, also die nur das zeichnen was nötig ist. Das Problem ist aber, dass ich nichts unter Delphi gefunden habe womit ich eine Art Clipping-Maske erstellen kann. Das Einzige was da ist, ist dieser UnionRect, womit man aus zwei Rect-Bereichen einen gemeinsamen machen kann. Das Ergebnis ist aber nur ein großer Rect-Bereich, der beide kleinen Rect-Bereiche einschließt. Besser wäre eine Art Lochmaske. Hier muss man prüfen was evtl. die API bietet. Ich habe nichts gefunden, aber ich hab das vor 10 Jahren geguckt. Vielleicht gibt es inzwischen etwas.

Das Problem ist irgendwann, dass wenn man genug Rect-Bereiche hat und sie alle zusammenfasst, zuletzt der Rechtbereich von der Gräße der Leinwand da ist. Womit man sich letztendlich die Mühe sparen kann.

Wenn du also das weiter recherchierst, dann such mal nach der Möglichkeit einer Clipping-Lochmaske.
  Mit Zitat antworten Zitat