第一张图片为背景图片 bmp 格式
第二章图片为人物图片 bmp 格式 人物以外的透明部分以颜色 $FF00FF 表示
图片尺寸都为400*400希望进行图片叠加,要求速度快的方式。不能用像素处理的方式。我记得以前用TransparentBlt函数做过,是可以的。
可刚才编码,大约是以下样子
TransparentBlt(ADC, 0,0,400,400,objCv1.handle,0,0,400,400,$FF00FF);
TransparentBlt(ADC, 0,0,400,400,objCv2.handle,0,0,400,400,$FF00FF);
第一句是绘背景图
第二句是在同一区域绘用$FF00FF颜色表示的前景图可结果是:
只用第一句 能正确绘制背景图
只用第二句 能正确绘制前景(人物)图 有透明效果
两句一起用,发现和单用第二句的效果是一样的。背景图看不见了,同时前景图透明部分为窗口下面其他程序的窗口,并且鼠标点进去能点到被透明显示出来的其他程序界面。奇怪了跪求高手解决方法 由于是要做一动画效果要循环显示每一帧图片,
所以透明叠加的方式必须速度很快,像素处理方式的不要。
谁能帮我写个有效代码 谢谢了。

解决方案 »

  1.   

    要求叠加速度快是应该的,而不要像素处理方式是不可能的,任何屏幕图像处理都是像素处理的,TransparentBlt也不例外。
      

  2.   

    可以先用TransparentBlt将人物图画到背景图上,然后用BitBlt将合成图拷贝到窗体上。
      

  3.   

    bitblt(ADC, 0,0,400,400,objCv2.handle,0,0,srcand);
    试试这个
      

  4.   

    测试过BitBlt在所有绘画函数里是最快的一个。
      

  5.   

    BitBlt 应该不支持透明色吧(遮罩颜色)?
      

  6.   

    可以先用TransparentBlt将人物图画到背景图上,然后用BitBlt将合成图拷贝到窗体上。 
     
    这是如何画?
      

  7.   

    将人物图画到背景图上:
    TransparentBlt(objCv1.handle, 0,0,400,400,objCv2.handle,0,0,400,400,$FF00FF);
    然后将objCv1.handle BitBlt到屏幕
      

  8.   

    TransparentBlt函数的速度是可以用逐像素计算的程序来打败的。