C#compact framework:加载一个png alpha混合文件

时间:2009-12-08 06:54:09

标签: c# compact-framework

我有一个png图像文件,它有自己的alpha混合。现在我想将它加载到移动设备中的表单上。我尝试了很多方法,但没有工作。有什么解决方案吗?提前致谢。 这是我用来从资源加载图像的方法:

Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("drawObj.Graph.png");
Bitmap myPNGImg = new Bitmap(stream);

然后创建具有相同大小的图像Graph.png:

的新位图
Bitmap myBlankImg = new Bitmap(48,48);

Graphics  mynewGraph = Graphics.FromImage(myNew);

mynewGraph.Clear(Color.Transparent);

绘制PNG位图:mynewGraph.DrawImage(myPNGImg, 0, 0); 然后我从互联网上读到的东西:(

Rectangle rectDest = new Rectangle(50,50, 100, 100);

ImageAttributes imgatt = new ImageAttributes();

imgatt.SetColorKey(Color.Transparent, Color.Transparent);

myGraph.DrawImage(myNew, rectDest, 0, 0, 99, 99,GraphicsUnit.Pixel, imgatt);

它可以工作,但只是清除图像的四个角(某些圆角矩形)。图像左侧仍有一些白色边框。

2 个答案:

答案 0 :(得分:2)

使用Compact Framework上的Bitmap加载图像将丢失alpha信息。设置颜色键是一种替代的透明度方法,您可以牺牲一种精确的单一颜色作为透明颜色。

要在Compact Framework上使用Alpha混合,您可以使用OpenNETCF中的辅助类来加载PNG文件,保留alpha信息(请参阅Transparency and alpha blending),然后是P / Invoke AlphaBlend。它不漂亮,但它是需要的。另外要注意的是,使用alpha混合会对性能造成重大影响。要动态烘焙一些图像,这很好,但对于通用的屏幕绘制操作,您可能想要使用另一种方法。

答案 1 :(得分:0)

问题是在CF中,填充Color.Transparent实际上填充了白色(请参阅these two blog entries)。 Project Resistance有一个非常好的例子,说明如何进行混合(实际上有几个)。