如何在不失去透明度的情况下将图像转换为图标?我有PNG图像,我需要在显示它们之前将其转换为图标。我是这样做的:publicIconImageToIcon(ImageimgTest){Bitmapbitmap=newBitmap(imgTest);图标icoTest;IntPtriPtr=bitmap.GetHicon();icoTest=(Icon)Icon.FromHandle(iPtr).Clone();返回icoTest;这样做后我失去了透明度,alpha透明图像没有按预期呈现......这可以修复吗?不,还有很多。图标具有相当精致的内部结构,经过优化以在80年代的硬件上合理运行。图标图像有三个位图,一个用于图标,一个单色位图指示图像的哪些部分是透明的,第二个单色位图指示哪些部分是反转的。生成那些单色位图很麻烦,而且.NET不支持它们。Bitmap.GetHicon()也不尝试。您需要一个图书馆来为您完成这项工作。Vista开始支持包含PNG图像的图标,这让他们松了一口气。您可以使用自己的代码生成它。像这样:publicstaticIconIconFromImage(Imageimg){varms=newSystem.IO.MemoryStream();varbw=newSystem.IO.BinaryWriter(ms);//标题bw.Write((short)0);//0:保留bw.Write((short)1);//2:1=ico,2=curbw.Write((short)1);//4:图片数量//图片目录varw=img.Width;如果(w>=256)w=0;bw.Write((字节)w);//0:图像的宽度varh=img.Height;如果(h>=256)h=0;bw.Write((byte)h);//1:图像的高度bw.Write((byte)0);//2:调色板中的颜色数bw.Write((byte)0);//3:保留bw.Write((short)0);//4:颜色平面的数量bw.Write((short)0);//6:每像素位数varsizeHere=ms.Position;bw.Write((int)0);//8:图像大小varstart=(int)ms.Position+4;bw.Write(开始);//12:图像数据偏移//图像数据img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);varimageSize=(int)ms.Position-开始;ms.Seek(sizeHere,System.IO.SeekOrigin.Begin);bw.Write(图像大小);ms.Seek(0,System.IO.SeekOrigin.Begin);//并加载它returnnewIcon(ms);}在.NET4.5和Windows8.1上测试请注意,在边缘透明的PNG图像上,您会看到“条纹”的可能性。这仅在图像以众所周知的背景颜色显示时才有效。按照设计,图标从不依赖。专用的图标编辑器永远是获得漂亮图标的唯一真正好方法。以上就是C#学习教程:如何将图片转为图标而不失透明度?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
