看一下哪个坐标点是"白色",比如(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
if Bitmap.GetPixel(x,y)=Bitmap.GetPixel(1,1) then bitmap.backgroundcolor=Color.trans.....
你也完全可以简单试验一下,在画图中随便画个红色的方块(不遮住所有的白色背景色),然后保存这张图片。在你的代码简单处理一下: Color c = bmp.GetPixel(1,1); //bmp为所获取的这张试验图片 bmp.MakeTransparent(c); ..... //然后显示这张bmp.这种情况可以达到你想要的效果。但这取决于图片本身的特点。
就是加载的时候,对BMP图片进行处理,设置一些透明色
,然后显示出来
不保存的
比如一个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
bitmap.backgroundcolor=Color.trans.....
如果要用PictureBox显示,你还需要将PictureBox的BackColor设置为Color.Transparent。
---------------------------------
中关村IT企业招聘.NET程序员,有兴趣者可联系我。
不过这个方法有个问题就是,图像边缘会有杂色,有锯齿毛刺
bmp.MakeTransparent(c);
..... //然后显示这张bmp.这种情况可以达到你想要的效果。但这取决于图片本身的特点。
另外 ,可以改这个图片的A通道就是了。不需要设置颜色