![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
маска+картинка=результат
race1 © (2005-01-05 10:22:00)как можно, имея исходный канвас (TCanvas), битовую маску и destination-канвас нарисовать на последнем исходный канвас, используя битовую маску? лучше если api функциями
race1 (2005-01-05 12:25:00) [1]спасибо. у меня ошибка была в том, что один из параметров был TCanvas вместо HDC
MBo (2005-01-05 11:24:00) [2]Вот два способа, есть и другие, например, с помощью BitBlt несколько раз, что совместимо с Win9X (PlgBlt и MaskBlt там не поддерживается)
procedure TForm1.Button4Click(Sender: TObject);
var
B,Mask : TBitmap;
P:array[0..3] of TPoint;
begin
B := TBitmap.Create;
Mask := TBitmap.Create;
B.LoadFromFile('e:\4.bmp');
Canvas.Draw(0,0,b);
Mask.PixelFormat:=pf1bit;
Mask.Width:=B.Width;
Mask.Height:=B.Height;
PatBlt(Mask.Canvas.Handle,0,0,B.Width,B.Height,BLACKNESS);
Mask.Canvas.Ellipse(10,10,B.Width-10,B.Height-10);
Canvas.Draw(B.Width+10,0,Mask);
P[0]:=Point(B.Width*2+20,0);
P[1]:=Point(B.Width*3+20,0);
P[2]:=Point(B.Width*2+20,B.Height);
PlgBlt(Canvas.Handle,P,B.Canvas.Handle,0,0,B.Width,B.Height,MAsk.Handle,0,0);
MaskBlt(Canvas.Handle,B.Width*3+30,0,B.Width,B.Height,B.Canvas.Handle,
0,0,Mask.Handle,0,0,MakeRop4(SRCCOPY,PATCOPY));
B.Free;
Mask.Free;
end;
см. также TransparentStretchBlt в Graphics.pas
race1 (2005-01-05 10:37:00) [3]а примерчика нету? я вроде всё по справке делаю, даже немного из vcl'я взял, но "параметр указан неверно"...
MBo (2005-01-05 10:29:00) [4]MaskBlt