Entwickler-Ecke

Multimedia / Grafik - In TPaintBox zeichnen mit TransparentColor


HelgeLange - Fr 02.02.07 19:23
Titel: In TPaintBox zeichnen mit TransparentColor
Ich habe mir auf Grund einer von mir gebauten Resourcen-Verwaltung eine Komponente von TPaintBox abgeleitet, die das Zeichnen selbst übernimmt. Das funktioniert soweit ganz gut, nur dass ich gerade vor dem Problem stehe, dass ich einen grauen Hintergrund hab, die Transparentfarbe allerdings weiss ist, das sieht natürlich doof aus. Mein Paint siet wie folgt aus :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TResBitmap.Paint;
var MemDC     : HDC;
    OldBitmap : DWORD;
begin
  inherited;
  If FhBitmap > 0 Then begin // do we have a valid Handle ?
    MemDC := CreateCompatibleDC(0);
    OldBitmap := SelectObject(MemDC, FhBitmap);
    BitBlt(Canvas.Handle,
           0,
           0,
           Width,
           Height,
           MemDC,
           0,
           0,
           SRCCOPY);
    SelectObject(MemDC, OldBitmap);
    DeleteDC(MemDC);
  end;  //  --  If FhBitmap > 0 Then
end// Paint


Gibt's Ideen ?


Lossy eX - So 04.02.07 15:02

BitBlt kopiert nur stumpf ein Bitmap von A nach B. Die Methode die du suchst heißt Suche im MSDN TRANSPARENTBLT.


HelgeLange - Mo 05.02.07 15:07

Danke, das hat geholfen :)


freedy - Mo 12.03.07 16:26

Hi!

Könntest du deine jetzige Lösung evtl. posten? Würde mich sehr interessieren.


HelgeLange - Mo 12.03.07 16:34


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:
28:
29:
  If FhBitmap > 0 Then begin  // do we have a valid Handle ?
    MemDC := CreateCompatibleDC(0);
    OldBitmap := SelectObject(MemDC, FhBitmap);
    If FpTransparency.Transparent Then begin
      TransparentBlt(Canvas.Handle,
                     0,
                     0,
                     Width,
                     Height,
                     MemDC,
                     0,
                     0,
                     Width,
                     Height,
                     FpTransparency.TransparentColor);
    end else begin
      BitBlt(Canvas.Handle,
             0,
             0,
             Width,
             Height,
             MemDC,
             0,
             0,
             SRCCOPY);
    end;
    SelectObject(MemDC, OldBitmap);
    DeleteDC(MemDC);
  end;  //  --  If FhBitmap > 0 Then


Bitte schön


freedy - Mo 12.03.07 17:42

Danke :-)