.NET中的"着色"图像
时间:2020-03-06 14:52:05 来源:igfitidea点击:
有没有一种简单的方法可以以编程方式对.NET中的图像进行着色?基本上,我们有一个黑白图像,需要在其上面放置一层粉红色的图像,并降低该层的不透明度,以使图片变为粉红色。
解决方案
我们应该使用精彩的ImageMagick库。它具有.NET绑定,因此在那里没有问题。
玩得开心! :)
想到的方式是使用"绘图"包以给定的颜色在图片上绘制一个矩形(可以设置Alpha)。它的效率不是很高,但是通过缓存,即使在繁忙的服务器上也不会造成任何危害。
查看以下链接:
http://www.codeproject.com/KB/GDI-plus/csharpgraphicfilters11.aspx
http://www.codeproject.com/KB/GDI-plus/KVImageProcess.aspx
对于.net框架方法来说,这有点太自定义了。如果找不到单个方法调用解决方案,我将发布一些可能需要研究的东西。
如果我们有WPF,则可以将图像加载到控件中。在其顶部有另一个控件(带有粉红色填充和透明度的矩形)。 (使用诸如Grid之类的东西进行布局,以使它们都完全重叠)
接下来你可以
RenderTargetBitmap bmp = new RenderTargetBitmap( imageWidth,imageHeight, DPIHoriz, DPIVert, PixelFormats.Pbrga32); // if you don't want to make the controls 'visible' on screen, you need to trigger size calculations explicitly. grid.Measure(new Size(imageWidth, imageHeight)); grid.Arrange(new Rect(0,0, imageWidth, imageHeight); bmp.Render(grid);
这样,我们就可以将屏幕上看到的所有内容写入内存中的位图。然后,我们可以将其保存。
如果这不起作用,则可以使用WriteableBitmap类进行像素级控制,并进行字节劳动。
我认为,如果我们想给图像着色而不是仅在顶部放置一个smi-transparent图层,它将有些复杂。如果要与PhotoShop中的"屏幕"图层模式具有相同的效果,则必须用新颜色的阴影替换图像中所有黑色的阴影,以使白色部分保持白色。
它可以最明确地在.NET中完成,但是我认为查看某种类型的库不会有什么坏处。