C# - 从List <int> []中绘制图片

时间:2016-01-20 10:55:49

标签: c#

我必须从整数值中绘制一张图片。

List<int>[] channelData

在channelData中有5081个数组,每个数组有2048个值。 因为每个像素只有一个整数(0-1000之间),所以图片为黑/白。

这是我逐个像素地绘制图片的代码:

Bitmap myBitmap = new Bitmap(channelData[0].Count, channelData.Length);
        for (int y = 0; y < channelData.Length; y++) {
            for (int x = 0; x < channelData[y].Count; x++) {
                int myColor = (channelData[y].ElementAt(x) * 255) / 1000;
                myBitmap.SetPixel(x, y, Color.FromArgb(myColor, myColor, myColor));
            }
        }
        pictureBox1.Image = myBitmap;

代码有效,但只有我画了4行。如果我画得更多,我会得到一个例外:

"System.ArgumentException" in System.Drawing.dll

我有更好的方法来绘制图片吗?

1 个答案:

答案 0 :(得分:3)

有两件事可能导致此异常:

  • myColor低于0或高于255Color.FromArgb()会引发异常。确保您的数据范围确实为[0; 1000]
  • xy超出图片维度,Bitmap.SetColor()会引发异常。最有可能的是x,它与数据结构的第二维(List<int> s的长度)有关。确保每个List<int>与数组List<int>中的第一个channelData一样长,因为您使用此长度来创建Bitmap

为确保您始终拥有足够的图片尺寸,请尝试按以下方式创建Bitmap

using System.Linq;

...

var myBitmap = new Bitmap(channelData.Max(l => l.Count), channelData.Length);