procedure PolyCopyBmp(var Tag: TBitmap; Source: TBitmap; Points: array of TPoint);
var
Rgn: HRGN;
begin
if not Assigned(Tag) then
Tag := TBitmap.Create;
with Tag do
begin
Width := Source.Width;
Height := Source.Height;
end;
Rgn := CreatePolygonRgn(Points[0], High(Points)+1, WINDING);
SelectClipRgn(Tag.Canvas.Handle, Rgn);
BitBlt(Tag.Canvas.Handle, 0, 0, Tag.Width, Tag.Height, Source.Canvas.Handle, 0, 0, SRCCOPY);
SelectClipRgn(Tag.Canvas.Handle, 0);
DeleteObject(Rgn);
end;