繁体   English   中英

如何在不使用Bitmap.MakeTransparent()的情况下在C#中将图像设置为具有透明背景?

[英]How can I set an image to have a transparent background in C# without using Bitmap.MakeTransparent()?

我想将图像设置为透明背景,但是我不想用透明色替换特定颜色的所有像素。

更具体地说,该图像是通过IShellItemImageFactory.GetImage获得的文件夹的缩略图。 如Windows资源管理器缩略图视图中所示,这给了我一个位图,但是背景是纯白色。

我可以在其上使用Bitmap.MakeTransparent,并且在大多数情况下都可以使用,但是在缩略图本身包含白色的任何情况下(例如,包含图像的文件夹,其中包含白色)。

顺便说一句,这是10年来作为开发人员的第一次,在搜索了我的问题之后,我在任何地方都找不到答案,而我实际上不得不亲自问这个问题。 (我认为这意味着我只是升级了!Yippee,我现在是第二级开发人员...)

使用泛洪填充算法可以根据需要从外部填充相同颜色的像素。 它类似于Photoshop中的魔术棒。

http://en.wikipedia.org/wiki/Flood_fill

我要做的是用一些晦涩的颜色(洋红色总是替我填充),然后用透明色替换该颜色(我不知道用透明像素填充颜色是否可行)。

那么,您从IShellItemImageFactory.GetImage得到的是一个包含白色背景上原始图像的合成图像? 如果图像的纵横比与缩略图尺寸不同,我怀疑会有白色背景。 例如,如果您要求640x480图片的96x96缩略图,则顶部和底部会有一些空白。

如果是这样,您有问题。 您无法区分图像中包含的白色像素和GetImage添加的白色像素。

您可以做几件事。 您可以加载图像并自行调整大小。 那可能是最简单的。 然后,您想维护自己的缩略图缓存。

或者,您可以检查GetImage返回的图像以查找侧面的空白。 基本上,如果行(或列)上的每个像素都是白色,则使该行(或列)透明。 比这要复杂一些(例如,NBA徽标 )。 但这实际上就是您想要做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM