Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#5

AW: Transparentes Bitmap verschieben

  Alt 30. Jan 2014, 18:11
Ich hab schon beim letzten Posting im Kopf gehabt, dass es da etwas gab, als ich von 10 Jahren mich damit beschäftigte. Aber ich war mir nicht sicher, also habe ich es nicht erwähnt.

Nun habe ich mir die OH wieder etwas genauer angeguckt und ja, es gibt etwas besseres als UnionRect, und zwar Regionen. Mit Regionen kann man eine Lochmaske erstellen. Es wird dann nicht das kleinste gemeinsame Rechteck gebildet wie bei UnionRect, sondern eine Lochmaske. Gezeichnet wird nur in die Maske, der Rest wird ignoriert.

Hier ein Beispiel mit zwei Regionen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  FilePath: String;
  Bmp: TBitmap;
  RgnGesamt, Rgn1, Rgn2: HRGN;
begin
  FilePath := 'C:\WINDOWS\Web\Wallpaper\Grüne Idylle.bmp';

  Bmp := TBitmap.Create;
  try
    Bmp.LoadFromFile(FilePath);

    RgnGesamt := CreateRectRgn(0, 0, 0, 0);
    Rgn1 := CreateRectRgn(100, 100, 200, 200);
    Rgn2 := CreateEllipticRgn(300, 300, 400, 400);
    CombineRGN(RgnGesamt, Rgn1, Rgn2, RGN_OR);

    SelectClipRgn(Canvas.Handle, RgnGesamt);
    Canvas.Draw(0, 0, Bmp);

    SelectClipRgn(Canvas.Handle, 0);
    DeleteObject(RgnGesamt);
    DeleteObject(Rgn1);
    DeleteObject(Rgn2);
  finally
    Bmp.Free;
  end;
end;
beide Regionen werden kombiniert. Mit SelectClipRgn wird dann ein Bereich erstellt in das gezeichnet werden kann.
  Mit Zitat antworten Zitat