在内存场景中做半透明图片后再加入picturebox,图片总是变暗,疑是内存场景背景色的问题,特有此问,还请大家帮助。
使用setbkcolor函数无效,查msdn得知,它对绘图区域无效,仅用于填充阴影刷子、虚线画笔以及字符(如背景模式为OPAQUE)中的空隙。

解决方案 »

  1.   

    实验成功一法:FillRect
    凭空多出许多代码,不知道还有没有其它方法可行,期待高手的帮助。
    另外,随便问一个很菜的问题,除开msdn以外,还可以从何处得到GDI函数和DirectX9.0函数的帮助文件。
      

  2.   

    是函数AlphaBlend的作法问题,若直接作用于picturebox处理半透明效果会逐渐淡化并变白,而在内存场景中处理时却是变暗。
    我怀疑是内存场景背景色的问题,但不知道如何直接设置,目前使用FillRect填充颜色后加图来解决的,不知道有没有其它方法。还请诸位帮助一下——尤其希望获得laviewpbt兄的指点。
      

  3.   

    晕,直接说现象不知道你啥意思,没点代码。
    是这个问题吗? 如果AlphaFormat字段为0,源位图中的所有像素使用同样的常量alpha值,即SourceConstantAlpha字段中的值,该值实际上是0和255,而不是0和1。这里0表示完全透明,255表示完全不透明。目标像素以255-SourceConstantAlpha值作为alpha值。 
      如果AlphaFormat字段的值是AC_SRC_ALPHA,源设备表面的每个像素必须有各自的alpha通道。即,必须是32-bpp的物理设备上下文,或是选中了32-bpp DDB和DIB段的内存设备上下文。这些情况下,每个源像素有4个8位通道:红、绿、蓝和alpha。每个像素的alpha通道和SourceConstantAlpha字段一起用于把源和目标混合起来。实际用于计算的运算式如下: 
      

  4.   

    赵老师的解释切题,但我实在想知道内存场景的背景色只能画上去吗?没有像picturebox.backcolor=rgb()一样有什么api函数直接设置么?
    只是想确认一样,请诸位老师不要着急啊。我这个学生反应慢得很,没有办法,唉。
      

  5.   

    那只是自动调用了绘图而已,自建 hDC 就要自己做了。