窗体上有一个Image组件,Image组件有一幅背景图片。
现在我需要在背景图片上显示另外小幅图片。
我用CopyRect方法把另一个Image组件中的小幅图片复制到第一个Image组件时,图片却变色了。
请问,怎么样才能让图片不变色呢?

解决方案 »

  1.   

    MoveFirst() 应该不是这个问题。wudi_1982
    比如说,背景图片有点发红。那么复制上去的图片就泛红。
      

  2.   

    Image1.Canvas.CopyRect(Image1.ClientRect,Image2.Canvas,Image2.ClientRect);
    我刚才临时用这个试验了一下,image1是红色背景得,image2是黄色得,复制上去之后,一切正常,不会是你显示器得问题吧。
      

  3.   

    bcxw.512j.com/1.bmp
    bcxw.512j.com/2.bmp第一张是红色图片
    第二张是蓝色图片两张不是纯色的。我用
    Image1.Canvas.CopyRect(Image1.ClientRect,Image2.Canvas,Image2.ClientRect);
    代码后,Image1中的图片却不是Image2中图片的本来面目了。
    麻烦 wudi_1982 下载那两张图片(决无毒),然后手工装载到Image1和Image2的Picture属性中。
      

  4.   

    我去看看,有毒得话,你以后就不要上CSDN了。见一次杀一次。
      

  5.   

    -_-!
    我把系统中的自带的JPG图片转成了BMP
    一个1.37M
    一个469 KB
    高手辛苦了。 ^_^
      

  6.   

    用copyrect,还没有找到解决办法,估计只有像photoshope那样,设置多个图层了,在DELPHI里,最笨得办法,就是把image2叠加到image1上了,相当于两个图层。
      

  7.   

    搞定
    一个间接得办法
    你放一个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;
      

  8.   

    哦,最后能用CopyRect 。继续等待ing
    其他方法,用BitBlt 行吧?
      

  9.   

    copyrect刚才又试了一下,直接用好像不行。。有一个间接得思路,就是把将被覆盖得内容,先清空了,不知道行不行。但我觉得,我上面提供得方法,虽然看起来麻烦一点,但分层得观点我觉得还是有用的。
      

  10.   

    清空?是不是 FillRect 啊?
    我试过,好像不行啊。
    实在不行,就用你的方法吧
      

  11.   

    还有一种办法,就是把图片1的内容分两次copy,即去除要覆盖的那部分不copy,只copy剩下的,然后再把图片2copy到那个生于区域中。