Вниз
Скачать: CL | DM;

маска+картинка=результат   Найти похожие ветки 

 
race1   (2005-01-05 10:22) [0]

как можно, имея исходный канвас (TCanvas), битовую маску и destination-канвас нарисовать на последнем исходный канвас, используя битовую маску? лучше если api функциями


 
MBo ©   (2005-01-05 10:29) [1]

MaskBlt


 
race1   (2005-01-05 10:37) [2]

а примерчика нету? я вроде всё по справке делаю, даже немного из vcl"я взял, но "параметр указан неверно"...


 
MBo ©   (2005-01-05 11:24) [3]

Вот два способа, есть и другие, например, с помощью 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 12:25) [4]

спасибо. у меня ошибка была в том, что один из параметров был TCanvas вместо HDC



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
1-1107708424
focor
2005-02-06 19:47
2005.02.20
СЕРИЙНИК жесткого


1-1107865106
sancheskas
2005-02-08 15:18
2005.02.20
PageControl


8-1099917444
Змей
2004-11-08 15:37
2005.02.20
конец файла


4-1105164394
Kurt
2005-01-08 09:06
2005.02.20
В трей....


9-1100491033
ballack
2004-11-15 06:57
2005.02.20
Как избежать наезда спрайтов друг на друга...




   Наверх