图像高手和版主 进来看一下 遮罩问题 希望找到最好的方法!!(100分)

明天0

Unregistered / Unconfirmed
GUEST, unregistred user!
希望在一张bmp照片,加一个遮罩图片 希望根据遮罩图片显示的形状为不规则形状,比如三角形,圆形,
最好是或不规则图形. 而且,照片的下面是有一张背景图片的,所以要能看到背景的图片.
遮罩图片有黑、白两种颜色 如果是有渐变效果,这图片也显示为渐变。
遮罩的白颜色的地方显示 原图片 ,黑颜色则透明
 
我最近刚做过这个类似,蒙板的。
我想应该给帮上你的忙。下面你的代码你看看吧。
procedure TForm1.copymask(src,mask:tbitmap;dest:tcanvas);
var
bmp1,bmp,bmp2:TBitmap;
line,line1,line2:pByteArray;
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为合成之后的图片
遮罩图片有黑、白两种颜色 如果是有渐变效果,这图片也显示为渐变。
我试过了。用速度很快的。
 
哈哈!有更好的吗?
不规则形状,三角形,圆形,不规则图形。
不知道怎么做的。
有那位高手可以指点指点?
 
PowerDesigner950.655.EBF2
 
把你的例子程序给我看看,可以吗?我也在做这方面的图象处理
 
顶部