当 Image 组件中有图片时再用CopyRect复制图片到上面时变色,怎么解决呢? 窗体上有一个Image组件,Image组件有一幅背景图片。现在我需要在背景图片上显示另外小幅图片。我用CopyRect方法把另一个Image组件中的小幅图片复制到第一个Image组件时,图片却变色了。请问,怎么样才能让图片不变色呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MoveFirst() 应该不是这个问题。wudi_1982比如说,背景图片有点发红。那么复制上去的图片就泛红。 Image1.Canvas.CopyRect(Image1.ClientRect,Image2.Canvas,Image2.ClientRect);我刚才临时用这个试验了一下,image1是红色背景得,image2是黄色得,复制上去之后,一切正常,不会是你显示器得问题吧。 bcxw.512j.com/1.bmpbcxw.512j.com/2.bmp第一张是红色图片第二张是蓝色图片两张不是纯色的。我用Image1.Canvas.CopyRect(Image1.ClientRect,Image2.Canvas,Image2.ClientRect);代码后,Image1中的图片却不是Image2中图片的本来面目了。麻烦 wudi_1982 下载那两张图片(决无毒),然后手工装载到Image1和Image2的Picture属性中。 我去看看,有毒得话,你以后就不要上CSDN了。见一次杀一次。 -_-!我把系统中的自带的JPG图片转成了BMP一个1.37M一个469 KB高手辛苦了。 ^_^ 用copyrect,还没有找到解决办法,估计只有像photoshope那样,设置多个图层了,在DELPHI里,最笨得办法,就是把image2叠加到image1上了,相当于两个图层。 搞定一个间接得办法你放一个panel上去,然后把两个图片都放在panel上,image1得align属性设置为alclient,然后image2(一个比较小得)放在image1上面(这些工作,如果你得需求中不好静态得做,就动态生成,代码我就不写了),然后放一个image3在form上,用下面代码即可,我再去研究研究copyrect,看看有没有直接得办法。procedure TForm1.BitBtn4Click(Sender: TObject);var a : trect; c:TCanvas;begin a.Left := image1.Left; a.Top := image1.Top; a.Right := Image1.Left + image1.Width; a.Bottom := Image1.Top + image1.Height; Image2.Left := Image1.Left; Image2.Top := Image2.Top; c:=TControlCanvas.Create; TControlCanvas(c).Control:=Panel1; Image3.Canvas.CopyRect(Image3.ClientRect,c,c.ClipRect); c.Free; // Image3.Canvas.CopyRect(a,Form1.Canvas,image3.ClientRect);end; 哦,最后能用CopyRect 。继续等待ing其他方法,用BitBlt 行吧? copyrect刚才又试了一下,直接用好像不行。。有一个间接得思路,就是把将被覆盖得内容,先清空了,不知道行不行。但我觉得,我上面提供得方法,虽然看起来麻烦一点,但分层得观点我觉得还是有用的。 清空?是不是 FillRect 啊?我试过,好像不行啊。实在不行,就用你的方法吧 还有一种办法,就是把图片1的内容分两次copy,即去除要覆盖的那部分不copy,只copy剩下的,然后再把图片2copy到那个生于区域中。 bde问题 :invalid handle in record buffer 求和语句 在TIMAGE上画图!!! 我想達到數據的列的累加. 再问mdi+dll的问题,望高手出现(up有分) 怎样在调试程序时关闭那该死的cpu窗口,回答后马上给分,我在线等待 如何从一个字符串中按顺序一个字符一个字符的取出来?? 经典代码下载 表表插入问题,请高手指教 拜师学艺见面酬谢 请问判断一个字符串是否为一个路径的函数和判断文件夹是否存在的函数是什么? 有ShowModal只作用于窗体,而不作用于整个程序的吗?
比如说,背景图片有点发红。那么复制上去的图片就泛红。
我刚才临时用这个试验了一下,image1是红色背景得,image2是黄色得,复制上去之后,一切正常,不会是你显示器得问题吧。
bcxw.512j.com/2.bmp第一张是红色图片
第二张是蓝色图片两张不是纯色的。我用
Image1.Canvas.CopyRect(Image1.ClientRect,Image2.Canvas,Image2.ClientRect);
代码后,Image1中的图片却不是Image2中图片的本来面目了。
麻烦 wudi_1982 下载那两张图片(决无毒),然后手工装载到Image1和Image2的Picture属性中。
我把系统中的自带的JPG图片转成了BMP
一个1.37M
一个469 KB
高手辛苦了。 ^_^
一个间接得办法
你放一个panel上去,然后把两个图片都放在panel上,image1得align属性设置为alclient,然后image2(一个比较小得)放在image1上面(这些工作,如果你得需求中不好静态得做,就动态生成,代码我就不写了),然后放一个image3在form上,用下面代码即可,我再去研究研究copyrect,看看有没有直接得办法。procedure TForm1.BitBtn4Click(Sender: TObject);
var
a : trect; c:TCanvas;begin
a.Left := image1.Left;
a.Top := image1.Top;
a.Right := Image1.Left + image1.Width;
a.Bottom := Image1.Top + image1.Height;
Image2.Left := Image1.Left;
Image2.Top := Image2.Top; c:=TControlCanvas.Create; TControlCanvas(c).Control:=Panel1;
Image3.Canvas.CopyRect(Image3.ClientRect,c,c.ClipRect); c.Free;
// Image3.Canvas.CopyRect(a,Form1.Canvas,image3.ClientRect);
end;
其他方法,用BitBlt 行吧?
我试过,好像不行啊。
实在不行,就用你的方法吧