我必须从整数值中绘制一张图片。
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
我有更好的方法来绘制图片吗?
答案 0 :(得分:3)
有两件事可能导致此异常:
myColor
低于0
或高于255
,Color.FromArgb()
会引发异常。确保您的数据范围确实为[0; 1000]
。x
或y
超出图片维度,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);