我得到了一个HICON句柄,试过用Bitmap类的构造函数Bitmap(HICON hIcon)来创建一个Bitmap对象,然后用Graphics的DrawImage画图,但是图标变成不透明了(烦!),有什么办法可以在Graphics上绘出带透明的图标,谢谢大侠们,我实在找不到办法了。

解决方案 »

  1.   

    那好像牵涉到像素混合啊,不是你所想的那么简单,你必须先将bitmap要覆盖的那一片土地(rect)取出来保存,然后判断色深,然后混合,在draw出来,这和游戏里的alpha混合Blit很像.
    伪玛:
    RGB16bit 565色深
    pixel_high=pixel&(1111100000011111)b//取高位
    pixel_mid=pixel&(0000011111100000)b//取中位
    pixel_low=pixel&(0000000000011111)b//取低位
    pixel_rect类似
    pixeled_high=pixel_high*alpha+pixel_rect_high(1-alpha)
    pixeled_mid=pixel_mid*alpha+pixel_mid_high(1-alpha)
    pixeled_low=pixel_low*alpha+pixel_low_high(1-alpha)
    最后将pixeled的土draw上去就可以了
    alpha是一个参数在1,0之间,设定大小可以改变透明度。
    还有更优的算法,我记不住了,可以去网上查
    这个算法我是从书上记下来的,还没用到实际上面去,有错就别怪我了
    但是要想获得动态透明效果,不混合像素那是一定不行的!!
      

  2.   

    这个只好这么干了,谢谢你。
    微软的贱淫,在Gdiplus里弄个DrawIcon函数不就行了吗,看他简介里一个都没介绍!在.Net FrameWork里有DrawIcon这个函数但是偏偏和MFC阴阳相隔,没用。
      

  3.   

    任何图形图像只有转换成数据流才有效的,icon和位图在最终显示的时候是没有差别的,只是倒入的方法,大小,解压算法(bitmap好像没有)什么的不同,不知我说的对不对,新手,不敢说得太绝对了。