如何从 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 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]

如何从设备中获取 PDF 文件以便能够从我的应用程序中上传?