我用一个image导入显示一个bmp图,在上面又放了一个image,画了几条线,我现在想把此时的效果图保存在bmp里,该怎么做呢?

解决方案 »

  1.   

    两个image一样大
    读取的时候同时读取不就行了吗?
      

  2.   

    我猜你的意思是..前面的图片有部分是透明的?对吗?想把两个图的合成效果保存在一个BMP里????
    如果是这个意思的话.看看下面的代码..我随手写的.不严格了:
    要画透明的BMP的话.找到透明色.可以用 BMP.CANVAS.PIXEL[X,Y],次方法返回该点像素的RGB值;
    然后化该透明图的时候.用CANVAS.BRUSHCOPY(DRC,SRCCANVAS,SRC,COLOR);COLOR就是透明色.
    比如说.BMP1,BMP2;
    BMP1是背景图.BMP2为前景图.BMP2有部分是透明的.透明色为左下角像素.
    PROCEDURE DRAW;
    VAR
    C:TCOLOR;
    BEGIN
      C:=BMP2.CANVAS.PIXEL[0,BMP2.HEGHT-1];
      BMP1.CANVAS.BRUSHCOPY(RECT(0,0,32,32),BMP2.CANVAS,RECT(0,0,32,32),C);END;
    BMP1就是最后的合成图了。
      

  3.   

    都怪我的问题没说清楚, SydPink(呜噜~呜噜)理解的对:前面的image是全透明的,后面image是个bmp图片,我在前面的image上画了许多线,想把两个image的合成效果保存在一个BMP里,该怎么做呢?
      

  4.   

    BrushCopy的最后一个参数就是用于替换掉的颜色。比如。你的一张全红的图上。话了一条黑线。
     with Bmp1.Canvas do begin
      Brush.Style:=bsClear;
      BrushCopy(DstRc,Bmp2.Canvas,SrcRc,clRed);//具体参数写的时候看。我可能有错。
    // 就把线贴到了BMP1上。红色部分被透明了。
    end;
      

  5.   

    楼上的意思是我只用一个image并在上面画线就行了?我试了试在上面画线,却不能按我的要求显示颜色,比如画红线,显示出来却是黑的,而且我用图像编辑软件打开一个bmp,并在上面画红线,显示出来也不是红色的?难道还要修改调色板?
      

  6.   

    变色?????费解了。。你BMP是几位的哦。都换成24处理就好了。PIXELFORMAT:=PF24BIT;
      

  7.   

    我用的图片是256色的,估计是调色板的原因,在上面画线才会出现上面的问题,我发现vc的画笔载画线时可以指定颜色,这个颜色可以用r,g,b还表示,比如:hpen hpen=(hpen)selectobject(hdc,createpen(ps_solid,1,rgb(255,0,0))),这样我只要修改一下图片的调色板就可以画出我想要的颜色了,但delphi里怎么实现呢?
      

  8.   

    只用一个image的画,如果我在上面画线就破坏了image里的数据,这样就没办法还原了