我最近刚做过这个类似,蒙板的。
我想应该给帮上你的忙。下面你的代码你看看吧。
procedure TForm1.copymask(src,mask:tbitmap;dest:tcanvas);
var
bmp1,bmp,bmp2:TBitmap;
line,line1,line2
ByteArray;
i,j,c:Integer;
begin
bmp:=image1.Picture.Bitmap;//前景图
bmp1:=image3.Picture.Bitmap;//遮罩图片
bmp2:=image2.Picture.Bitmap;//背景图
bmp1.handletype:=bmDIB;
bmp.HandleType:=bmDIB;
bmp2.HandleType:=bmDIB;
bmp.PixelFormat:=pf24bit;
bmp1.PixelFormat:=pf24bit;
bmp2.PixelFormat:=pf24bit;
bmp2.Width:=bmp.Width ;
bmp2.Height:=bmp.Height ;
for j:=0 to bmp1.Height -1 do
begin
line:=bmp.ScanLine[j];
line1:=bmp1.ScanLine[j];
line2:=bmp2.ScanLine[j];
for i:=0 to bmp1.Width -1 do
begin
c:=line1[i*3];
line2[i*3]:=(line[i*3]*c+(255-c)*line2[i*3]) div 255;
line2[i*3+1]:=(line[i*3+1]*c+(255-c)*line2[i*3+1]) div 255;
line2[i*3+2]:=(line[i*3+2]*c+(255-c)*line2[i*3+2]) div 255;
end;
end;
image4.Picture.Graphic := bmp2
end;
//添加了四个image控件,
image1为前景、image2为遮罩图片、image3为背景图片、image4为合成之后的图片
遮罩图片有黑、白两种颜色 如果是有渐变效果,这图片也显示为渐变。
我试过了。用速度很快的。