Entwickler-Ecke

Multimedia / Grafik - Schnelles Ausmaskieren, schnelles Zeichnen


Delete - Mi 15.10.03 22:31
Titel: Schnelles Ausmaskieren, schnelles Zeichnen
Hallo zusammen,

ich bastel gerade an einer Komponente,
in der ein TLabel ein TBitmap-SKin haben soll.
Bei besonders großen Schriften habe ich dann nicht mehr eine
langweilige Farbe, sondern kann Texturen "überziehen".

Lösungsweg (Stark vereinfacht!):
1. Aus TLabel ein monochromes Bild A machen.
2. Bild B (Textur) laden und über Bild A ziehen.
3. Überdeckung von Schrift und Textur wiedergeben.

ABER:
Obwohl ich mittlerweile auf CopyRect verzichte,
ist BitBlt nicht wirklich schneller,
es entsteht beim zeichnen und refreshen stets ein flackern

FRAGE(N):
Wie kann ich das Ausmaskieren beschleunigen?
Gibt es etwas schnelleres als BitBlt,
oder gibt es Tricks die BitBlt beschleunigen?
Wie kann ich das Resultat schneller ausgeben?
D.h. wenn ich nun das fertige Bild habe,
wie kann ich es besonders schnell OHNE Flackern ausgeben?

Ich würde mich freuen, wenn Ihr mir helfen könntet!

XFiled

P.S.: Im folgenden:
Label1 (beliebiger Schriftzug)
Image1 (beliebige Textur)
Image2 (temporär, gleiche Größe wie Schriftzug)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
  Image2.Picture.Bitmap.Monochrome := True;
  BitBlt(
  Image2.Canvas.Handle,
  0, 0, Label1.Width, Label1.Height,
  Label1.Canvas.Handle,
  0, 0,
  SRCAND
  );
  Image2.Picture.Bitmap.Monochrome := False;
  SetStretchBltMode(
  Image2.Canvas.Handle,
  COLORONCOLOR
  );
  StretchBlt(
  Image2.Canvas.Handle,
  0, 0, Label1.Width, Label1.Height,
  Image1.Canvas.Handle,
  0, 0, Image1.Width, Image1.Height,
  SRCAND
  );
  DrawTransparentBitmap(
  Label1.Canvas.Handle,
  Image2.Picture.Bitmap.Handle,
  0,
  0,
  clBlack
  );


umpani - Do 16.10.03 09:27

Ich glaube, das Flackern kannst du mit "doubblebuffer" oder so ähnlich reduzieren.

Such mal hier im Forum.