如何从 System.Window.media.PixelFormats.Gray16 创建位图
Posted
技术标签:
【中文标题】如何从 System.Window.media.PixelFormats.Gray16 创建位图【英文标题】:How to create Bitmap from System.Window.media.PixelFormats.Gray16 【发布时间】:2009-05-20 12:24:08 【问题描述】:我成功地从他们的原始像素数据中绘制了图像。(只有 8 位图像)。 这是做同样事情的代码。
PixelFormat format = PixelFormat.Format8bppIndexed;
Bitmap bmp = new Bitmap(Img_Width, Img_Height, format);
Rectangle rect = new Rectangle(0, 0, Img_Width, Img_Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);
Marshal.Copy(rawPixel, 0, bmpData.Scan0, rawPixel.Length);
bmp.UnlockBits(bmpData);
现在大家都知道 PixelFormat.format16bppGrayscale 不支持 c# 2.0 GDI+。 我用谷歌搜索并获得了 3.0/3.5 框架支持。 所以我两个都安装了。 支持的类是 System.windows.media.PixelFormats。 PixelFormats.Gray16
现在我的问题是如何通过传递此参数来创建位图并获取显示图像。
我在那里有一些 BitmapSource 类,但我在 C#3.0 中很新。
请帮帮我。
【问题讨论】:
【参考方案1】:试试这个:
private static Bitmap changePixelFormat(Bitmap input, PixelFormat format)
Bitmap retval=new Bitmap(input.Width, input.Height, format);
retval.SetResolution(input.HorizontalResolution, input.VerticalResolution);
Graphics g = Graphics.FromImage(retval);
g.DrawImage(input, 0, 0);
g.Dispose();
return retval;
【讨论】:
我承认这并不是您所要求的,但它应该可以作为替代方案,或者可以通过创建新的输入位图并将原始数据复制到其上进行调整,以便您拥有传递给 changePixelFormat 的东西。【参考方案2】:看看AForge.net中的Greyscale filters。你可以找到来源here。
编辑:
作为我链接的那个来源的说明,它使用的是“旧”版本的 AForge.NET,但概念是相同的。
【讨论】:
感谢 Jason,我之前尝试过该代码,但图像显示不正确。我会告诉你,如果你通过 16bppRGB555 但图像看起来是彩色的,它可以工作。但是你不能通过 16bppGrayscale.so 不能正确显示。以上是关于如何从 System.Window.media.PixelFormats.Gray16 创建位图的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数
如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个