【问题标题】:C# convert a 2D double array to and greyscale imageC# 将二维双精度数组转换为灰度图像
【发布时间】:2014-11-21 22:45:23
【问题描述】:

第一次在这里使用 C#。我正在阅读一些图像文件,进行一些计算,然后输出和数组为 double。我需要能够将这个双数组(或这些,因为我将有多个数组)保存到灰度图像中。我一直在互联网上四处寻找,我找不到太多。我在 Python 和 Mathlab 上做过,但 C# 似乎对我不太友好。这是我到目前为止所做的(用于创建双图像)。

        static Image MakeImage(double[,] data)
    {
        Image img = new Bitmap(data.GetUpperBound(1), data.GetUpperBound(0));
        //Bitmap bitmap = new Bitmap(data.GetUpperBound(1), data.GetUpperBound(0));
        for (int i = 0; i < data.GetUpperBound(1); i++)
        {
            for (int k = 0; k < data.GetUpperBound(0); k++)
            {
                //bitmap.SetPixel(k, i, Color.FromArgb((int)data[i, k],(int) data[i, k],(int) data[i, k]));
            }
        }

        return img;
    }
}

}

这段代码实际上并没有做太多。它创建了我的空白图像模板。颜色不作为输入的两倍。我不知道如何从数据中创建图像...我被卡住了 =)

提前谢谢你。

【问题讨论】:

  • 你的代码没问题,数据的内容是什么?
  • 您好,代码目前只创建一个新的位图图像。我的问题是,我希望能够获取某个 DOUBLE[,] 数据并将其制成图像。例如:[[1.1,2.5],[4.2,3.3]] -> 有一张图片(位图图像​​),里面有这些数据。 (现在,它创建一个空白图像,而注释部分创建一个 INTEGER 图像)。

标签: c# arrays image


【解决方案1】:

如果您可以接受使用不安全的块,这是非常快的:

    private Image CreateImage(double[,] data)
    {
        double min = data.Min();
        double max = data.Max();
        double range = max - min;
        byte v;

        Bitmap bm = new Bitmap(data.GetLength(0), data.GetLength(1));
        BitmapData bd = bm.LockBits(new Rectangle(0, 0, bm.Width, bm.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);

        // This is much faster than calling Bitmap.SetPixel() for each pixel.
        unsafe
        {
            byte* ptr = (byte*)bd.Scan0;
            for (int j = 0; j < bd.Height; j++)
            {
                for (int i = 0; i < bd.Width; i++)
                {
                    v = (byte)(255 * (data[i, bd.Height - 1 - j] - min) / range);
                    ptr[0] = v;
                    ptr[1] = v;
                    ptr[2] = v;
                    ptr[3] = (byte)255;
                    ptr += 4;
                }
                ptr += (bd.Stride - (bd.Width * 4));
            }
        }

        bm.UnlockBits(bd);
        return bm;

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多