我想把一幅图片的是白色的地方设置成透明色,做法是遍历整个图片,发现时白色的像素点就置换成透明色,
但是再显示,发现白色的地方还是没有透明显示?
请问这是为什么啊?

解决方案 »

  1.   

    Bitmap有一个MakeTransparent方法,可以使某些颜色成为透明,不妨试试这个方法。如果最终保存到文件的时候使用BMP格式的话,似乎这种格式是不支持透明的。
      

  2.   

    我加载的是BMP文件,在加载的时候设置某些颜色为透明色
      

  3.   

    不是这样的
    就是加载的时候,对BMP图片进行处理,设置一些透明色
    ,然后显示出来
    不保存的
      

  4.   

    看一下哪个坐标点是"白色",比如(X,Y).是指你看到的白色,而不是数值意义上的"255,255,255,255".在处理成透明时,检测的颜色应该是(X,Y),而不是"255,255,255,255".因为系统在解压图片显示后,看上去是白色,但它就不是白色,所以应该用指定点的颜色来判断,而不应该用白色来判断.
    比如一个Bitmmap,上面有白色,虽然是rgb(255,255,255,255).但由于系统处理时会有个解压的过程,所以最终它就不是rgb(255,255,255,255),虽然看起来像是纯白.那么在这种情况下,假设图片左上角(1,1)就是这个颜色,而你想把它变成透明,那么应该用这样的方法:
    if Bitmap.GetPixel(x,y)=Bitmap.GetPixel(1,1) then
    而不是
    if Bitmap.GetPixel(x,y)=rgb(255,255,255,255) then
      

  5.   

    if Bitmap.GetPixel(x,y)=Bitmap.GetPixel(1,1) then 
    bitmap.backgroundcolor=Color.trans.....
      

  6.   

    使用MakeTransparent设置透明,当然你的Bitmap需要使用32位,否则没有ALPHA通道。
    如果要用PictureBox显示,你还需要将PictureBox的BackColor设置为Color.Transparent。
    ---------------------------------
    中关村IT企业招聘.NET程序员,有兴趣者可联系我。
      

  7.   

    最简单的方法就是用MakeTransparent函数
    不过这个方法有个问题就是,图像边缘会有杂色,有锯齿毛刺
      

  8.   

    很抱歉,大多图片不是你认为中的背景色均匀的。比如说你只是想把出现白色的地方改成透明,但极有可能这张图片中这些白色的地方RGB值并不均匀,另外还存在着邻近RGB值重叠的问题。所以最关键的是你所选的图片白色区域是否均匀且统一,否则很难实现。
      

  9.   

    你也完全可以简单试验一下,在画图中随便画个红色的方块(不遮住所有的白色背景色),然后保存这张图片。在你的代码简单处理一下:    Color c = bmp.GetPixel(1,1); //bmp为所获取的这张试验图片
        bmp.MakeTransparent(c);
       ..... //然后显示这张bmp.这种情况可以达到你想要的效果。但这取决于图片本身的特点。
      

  10.   

    自己写代码要得不,可能还简单一点,像素格式是RGBA,最后一个值就是不透明的程度
      

  11.   

    Bitmap中SetPixel方法指定像素的颜色。 
      

  12.   

    BMP图片没有A通道,不能设置透明的 储存为png就对了
    另外 ,可以改这个图片的A通道就是了。不需要设置颜色