A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我的问题是,我想使图像背景透明。而下面的功能工作正常,但对我来说,同时在不同的机器上测试我发现有很多的伪色和,因为它是我的机器和其他??一些机器上透明度不清晰。
我与调试版本的工作和测试是在发布版本完成。但是,即使发布版本中,我们看到在不同的机器不同的结果。
图像CreateTransparentBackgroundImage(形象画像){使用(位图tempBitmap =新位图(image.Width,image.Height,System.Drawing.Imaging.PixelFormat.Format32bppPArgb)){变种G = Graphics.FromImage(tempBitmap);
矩形REC =新的Rectangle(0,0,image.Width,image.Height);g.DrawImage(图像,REC,0,0,image.Width,image.Height,GraphicsUnit.Pixel);tempBitmap.MakeTransparent(System.Drawing.Color.White);g.Dispose();
回报(图)tempBitmap.Clone();
}
}
怎么解决?

3 个回复

倒序浏览
您的问题似乎来自很略有不同来源与目标色非常细微的差别。
MakeTransparent 不提供的任何的耐受性。
下面是必要的耐受性的功能。这将使每个像素tranparent比三角洲更接近目标颜色。 (距离是三通道的三角洲的简单叠加。)
回复 使用道具 举报
公共静态位图MakeTransparent(BMP位图,颜色关口,INT三角洲){//我们预计32bpp的位图!
VAR bmpData = bmp.LockBits(
新的Rectangle(0,0,bmp.Width,bmp.Height)
ImageLockMode.ReadWrite,bmp.PixelFormat);    长LEN = bmpData.Height * bmpData.Stride;字节[]数据=新的字节[LEN]
Marshal.Copy(bmpData.Scan0,数据,0,data.Length);    的for(int i = 0; I< LEN; I + = 4){INT DIST = Math.Abs??(数据[I + 0]  -  col.B);DIST + = Math.Abs??(数据[I + 1]  -  col.G);DIST + = Math.Abs??(数据第[i + 2]  -  col.R);如果(DIST&下; =三角形)数据第[i + 3] = 0;
}
Marshal.Copy(数据,0,bmpData.Scan0,data.Length);bmp.UnlockBits(bmpData);
返回BMP;
}
回复 使用道具 举报
下面是四个图像:1)源你给2) - 3)调用与5,10和50我已经把它们放在了坚实的红色背景之上,所以你可以看到二乙烯三胺值函数的结果在tranparent像素..:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马