Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#1

Denkfehler bei TransparentStretchBlt

  Alt 2. Jan 2012, 15:08
Hallo miteinander,

irgendwie ist nach dem Jahreswechsel der Denkapparat noch nicht ganz auf Hochtouren.
Es geht um folgende selbstgeschriebende Prozedur:

Delphi-Quellcode:
  procedure TransparentStretch(const Source, Destination : TBitmap);
  var
    TmpBmp : TBitmap;
  begin
    TmpBmp := TBitmap.Create;
    try
      TmpBmp.Width := Destination.Width;
      TmpBmp.Height := Destination.Height;

      SetStretchBltMode(TmpBmp.Canvas.Handle, HALFTONE);

      if TransparentStretchBlt(
                                TmpBmp.Canvas.Handle, 0, 0, TmpBmp.Width, TmpBmp.Height,
                                Source.Canvas.Handle, 0, 0, Source.Width, Source.Height,
                                Source.Canvas.Handle, 0, 0) then
      begin
        Destination.Assign(TmpBmp);
      end;
    finally
      TmpBmp.Free;
    end;
  end;
Destination ist in meinen Beispiel einfach ein rotes Bitmap und Source ein sehr viel kleineres schachbrettartiges Muster in Schwarz/Weiss.
Nun hätte ich gern, das am Ende ein roter Hintergrund mit schwarzen Kästchen rauskommt.
Leider sorgt das Aufrufen der Funktion nur für ein Umschalten und stretchen des Schachbrett-Musters, also als hätte man StretchBlt angewendet.

Ideen, Vorschläge, (Teil-)Lösungen?
Angehängte Grafiken
Dateityp: jpg Hintergrund.jpg (2,6 KB, 10x aufgerufen)
Dateityp: bmp Mask.Bmp (6,2 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat