【问题标题】:ushort array to Image objectushort 数组到 Image 对象
【发布时间】:2009-06-12 21:57:44
【问题描述】:

我有一个需要保存为 jpeg 文件的超短像素数据数组。根据我的发现,我可以使用

Image.Save(path, ImageFormat.Jpeg);

但我不知道如何将 ushort 数据放入 Image 对象中。我找到了使用字节数组但不是 ushort 的方法。 我花了很多时间试图解决这个问题,所以现在我问强大的 StackOverflow,我该怎么做?

编辑: 抱歉,ushorts 是 16 位灰度值。

【问题讨论】:

  • 不清楚为什么您的数据采用 ushort(0-256 或 16 位色深)。我将指向 BitConverter,因为它可能(或可能不)包含您的答案。
  • “超短像素数据数组”没有任何意义。数组的数据格式是什么?

标签: c#


【解决方案1】:

我认为你必须实际创建一个Bitmap,在其上绘制像素然后保存。

类似这样的:

var bitmap = new Bitmap(sizeX, sizeY, Imaging.PixelFormat.Format16bppGrayScale)

for (y = 0; ...)
for (x = 0; ...)
{
  bitmap.SetPixel(x, y, color information from ushort array);
}

bitmap.Save("filename.jpg", ImageFormat.Jpeg);

请注意,我不知道如何将 16 位灰度颜色信息获取到 Color 结构中。

【讨论】:

  • 我同意,如果您获得原始像素数据(无论格式),最直接的做法就是逐个像素地创建位图。
  • 这很好,但没有回答如何将 ushort 数据放入位图中的问题。
  • 这就是我最终所做的,并且似乎工作正常。但是,您知道 jpeg 不支持 16 位灰度,所以我使用 PixelFormat.Format24bppRgb 并将 r、g 和 b 设置为相同的值。
  • 所以你实际上失去了 65536-256 个灰度值,因为 R、G 和 B 的大小只有 1 个字节?
  • 是的,但我正在创建的 jpeg 是缩略图,因此损失是可以接受的。我尝试使用 PixelFormat.Format48bppRgb 以免丢失细节,但得到了一些奇怪的结果。 Format24bppRgb 正在工作,所以我很满意。
【解决方案2】:

这是一个基于公认答案的完整工作示例:

 public static void SaveJpg(string fileName,int sizeX,int sizeY,ushort [] imData)
    {
        var bitmap = new Bitmap(sizeX, sizeY, PixelFormat.Format48bppRgb);
        int count = 0;
        for (int y = 0; y < sizeY; y++)
        {
            for (int x = 0; x < sizeX; x++)
            {
                bitmap.SetPixel(x, y, Color.FromArgb(imData[count], imData[count], imData[count]));
                count++;
            }
        }
        bitmap.Save(fileName, ImageFormat.Jpeg);

    }

【讨论】:

    【解决方案3】:

    我相信你想使用继承自 Image 的 Bitmap 类。 This MSDN 参考可能会有所帮助。

    【讨论】:

    • 这并没有告诉我如何将 ushort 数据放入 Bitmap 对象中。
    • 我认为 Bitmap.SetPixel() 很明显。
    • 同样,这并没有告诉我如何将 ushort 数据放入位图对象中。 SetPixels 需要 Color 对象而不是 ushort 值。正如我的问题所述,我知道如何构建图像(位图源自图像),而不是使用 ushort 数据。
    • @DanVogel:你如何确定你的 ushort 值映射到什么颜色取决于你。您希望 0 是黑色、白色还是红色?由你决定;但是您必须将其放入您的代码中,并使用该转换信息将您的 ushorts 转换为您可以通过 setpixel 放入位图中的颜色。
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多