2010-11-13 17 views

Répondre

1

Vous pouvez sélectionner une région de clip elliptique/surfacique dans le contexte du périphérique cible, puis utiliser BitBlt comme d'habitude.

var 
    Rgn: HRGN; 
    Points: array[0..2] of TPoint; 
begin 
    //Rgn := CreateEllipticRgn(0, 0, 100, 100); 

    Points[0] := Point(0, 0); 
    Points[1] := Point(50, 50); 
    Points[2] := Point(50, 0); 
    Rgn := CreatePolygonRgn(Points, 3, WINDING); 

    SaveDC(Canvas.Handle); 
    SelectClipRgn(Canvas.Handle, Rgn); 
    DeleteObject(Rgn); // SelectClipRgn copies the region 

    BitBlt(Canvas.Handle, 0, 0, 100, 100, BmpDC, 0, 0, SRCCOPY); 

    RestoreDC(Canvas.Handle, -1); 
end; 
+0

Il semble que SaveDC ou RestoreDC ne soit pas vraiment nécessaire. Parce que nous ne modifions pas le pinceau, la police, etc. pour le restaurer. – bman

+0

Mais vous changez la région du clip. Vous pouvez utiliser GetClipRgn pour obtenir la région de clip en cours, ou vous pouvez appeler "SelectClipRgn (Canvas.Handle, 0)" pour supprimer toute région de clip une fois le travail terminé. –