放狼烟招呼高手,怎样把一张图片,嵌套入一个椭圆中? 例如一张图片中有一个实心黑色的椭圆, 我想把另一张图片嵌套入这个椭圆的黑色区域中,区域外的部分依照,请问这该怎么做,得到答案一定结贴给分。谢谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 zswang:好久没看到你了,没想到你还在这边混啊。 to ahpei: 是啊,一直在用Delphi做开发...我的CSDN id是:27337你的是: 79014搂主的是: 1530372看来我们属于同一个时期的用户 :) 谢谢清洁工大哥,效果图在:http://terry.imwork.net/csdn/我在这里发了很多次贴,都得到你的回复.其实我这阵子在这个版问的几个问题,最终都为了实现这个效果的。框形我的已经实现了,但就是椭圆不知怎么处理。 TO zswang: 呵呵,其实我来CSDN也两年了,我在JAVA版是一星的。不过最近为了做一个window软件,要拾起多年没用的delphi,所以所有分数都用完了,要申请新ID。这个月我多次给分你了。很佩服你的认真跟热心。 //参考如下代码var vBitmap: TBitmap; vRect: TRect;begin //Image1为原图2 Image2为目标图,默认为空 vBitmap := TBitmap.Create; try Image2.Picture.Bitmap.Width := Image1.Picture.Graphic.Width; Image2.Picture.Bitmap.Height := Image1.Picture.Graphic.Height; Image2.Picture.Bitmap.Canvas.Draw(0, 0, Image1.Picture.Graphic); vBitmap.Canvas.Brush.Color := clWhite; vBitmap.Width := Image1.Picture.Graphic.Width; vBitmap.Height := Image1.Picture.Graphic.Height; vBitmap.Canvas.Brush.Color := clBlack; vRect := Rect(0, 0, vBitmap.Width, vBitmap.Height); InflateRect(vRect, -25, -5); vBitmap.Canvas.Ellipse(vRect); vBitmap.Transparent := True; vBitmap.TransparentColor := clBlack; Image2.Picture.Bitmap.Canvas.Draw(0, 0, vBitmap); finally vBitmap.Free; end;end; procedure TForm1.Button1Click(Sender: TObject);var Src,Des:TJpegImage; SrcBmp,DesBmp:TBitmap;begin Src:=TJpegImage.Create; try Src.LoadFromFile('E:\a1.Jpg'); Des:=TJpegImage.Create; try Des.LoadFromFile('E:\a2.jpg'); SrcBmp:=TBitmap.Create; DesBmp:=TBitmap.Create; try SrcBmp.Assign(Src); DesBmp.Assign(Des); BitBlt(DesBmp.Canvas.Handle,0,0,DesBmp.Width,DesBmp.Height,SrcBmp.Canvas.Handle,0,0,SRCPAINT); Image1.Picture.Bitmap.Assign(DesBmp); finally SrcBmp.Free; DesBmp.Free; end; finally Des.Free; end; finally Src.Free; end;end;前提是你遮罩图片(a1)要保留的区域为白,要透过的区域为黑。就像你现在给出的图片的风格一样。 上面的各位,还是没有解决一个最大的问题,怎样得到这个椭圆的在所在图片里的上下左右四个坐标,不确定这四点,另一张图片的cavas也不知copy到什么地方,是吧? 如果椭圆的边缘颜色是固定的,并且背景不会出现这个颜色那就是从上到下扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Top那就是从左到右扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Left那就是从下到上扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Bottom那就是从右到左扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Right 高分!在线等!!用opengl画一个圆柱体 UDP模式下的http代理如何使用?对方必须开通TCP端口吗? 问一个关于udp的问题 哪位有斑马机(Zebra)打印汉字和条码的例子? 高手进来看看? 谁能解释下textfile这种数据类型? 如何将byte类型的转换为string? 急急急!!! 如何侦测一个FORM已完成实例话? dll 中的 form 不出现? TcpServer/TcpClient能相互传输数据集吗? delphi自带的多语言程序制作问题
好久没看到你了,没想到你还在这边混啊。
是啊,一直在用Delphi做开发...我的CSDN id是:27337
你的是: 79014
搂主的是: 1530372看来我们属于同一个时期的用户 :)
http://terry.imwork.net/csdn/我在这里发了很多次贴,都得到你的回复.其实我这阵子在这个版问的几个问题,最终都为了实现这个效果的。框形我的已经实现了,但就是椭圆不知怎么处理。
var
vBitmap: TBitmap;
vRect: TRect;
begin
//Image1为原图2 Image2为目标图,默认为空
vBitmap := TBitmap.Create;
try
Image2.Picture.Bitmap.Width := Image1.Picture.Graphic.Width;
Image2.Picture.Bitmap.Height := Image1.Picture.Graphic.Height;
Image2.Picture.Bitmap.Canvas.Draw(0, 0, Image1.Picture.Graphic);
vBitmap.Canvas.Brush.Color := clWhite;
vBitmap.Width := Image1.Picture.Graphic.Width;
vBitmap.Height := Image1.Picture.Graphic.Height;
vBitmap.Canvas.Brush.Color := clBlack;
vRect := Rect(0, 0, vBitmap.Width, vBitmap.Height);
InflateRect(vRect, -25, -5);
vBitmap.Canvas.Ellipse(vRect);
vBitmap.Transparent := True;
vBitmap.TransparentColor := clBlack;
Image2.Picture.Bitmap.Canvas.Draw(0, 0, vBitmap);
finally
vBitmap.Free;
end;
end;
var
Src,Des:TJpegImage;
SrcBmp,DesBmp:TBitmap;
begin
Src:=TJpegImage.Create;
try
Src.LoadFromFile('E:\a1.Jpg');
Des:=TJpegImage.Create;
try
Des.LoadFromFile('E:\a2.jpg');
SrcBmp:=TBitmap.Create;
DesBmp:=TBitmap.Create;
try
SrcBmp.Assign(Src);
DesBmp.Assign(Des);
BitBlt(DesBmp.Canvas.Handle,0,0,DesBmp.Width,DesBmp.Height,SrcBmp.Canvas.Handle,0,0,SRCPAINT);
Image1.Picture.Bitmap.Assign(DesBmp);
finally
SrcBmp.Free;
DesBmp.Free;
end;
finally
Des.Free;
end;
finally
Src.Free;
end;
end;前提是你遮罩图片(a1)要保留的区域为白,要透过的区域为黑。就像你现在给出的图片的风格一样。
那就是从上到下扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Top
那就是从左到右扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Left
那就是从下到上扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Bottom
那就是从右到左扫描,第一个出现边缘颜色的地方Y坐标为这个椭圆的Right