Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Transparent Bitmap zeichnen


MariaMaria - So 13.11.05 14:47
Titel: Transparent Bitmap zeichnen
Ich wollte eine Bitmap mit Transparenten Bereichen in ein anderes Bitmap zeichnen, das funktionierte mit Canvas.Draw ohne Probleme. Als ich allerdings nur einen Teil der Bitmap in das andere zeichnen wollte (mit Canvas.Copyrect) wurden die transparenten Bereiche Plötzlich nicht mehr herausgefiltert!
Wo liegt hier das Problem?


Muetze1 - So 13.11.05 14:58

Dein Problem liegt darin, das CopyRect BitBlt() intern nutzt und dieses die transparenten Bereiche nicht beachtet. Daher liegt das Problem nicht bei dir sondern eher an der Funktion. Ich würde dir als Abhilfe dazu zu 2 Möglichkeiten raten:

1. sorge dafür, das die Transparente Farbe bei beiden Bitmaps gleich sind, dann sollte CopyRect() das Bild nicht-transparent kopieren - was in diesem Falle ok ist, da schliesslich das Ziel Bitmap die gleiche Transparentfarbe hat und somit die gleichen Bereich transparent darstellt.

2. Nutze TransBlt(), aber das hat mehr Probleme falls TransBlt() nicht verfügbar ist und es hat Einschränkungen auf manchen Windows Versionen, daher musst du abwägen.

Es gibt noch die Möglichkeit mit Masken zu arbeiten, aber ich glaube das macht dies auch noch komplizierter.