ビットマップの作成と保存に取り組んでいます。ビットマップ内のピクセルを適切な値に設定するループがあります。しかし、コード内の注目された点でIndexOutOfRange例外を持つ、短い期間のimeの後にクラッシュします。Y座標がループ内の範囲外です
//data is an array of bytes of size (image width * image height) * 2;
Bitmap b = new Bitmap(width, height, PixelFormat.Format32bppArgb);
for (int i = 0; i < data.Length; i += 2)
{
int luminance = ((int)data[i] << 8) | (int)data[i + 1];
Color c = Color.FromArgb(luminance,luminance,luminance,luminance);
int x = i/2;
int y = x/width;
x %= width;
b.SetPixel(x, y, c);//crashes here when Y is at 513, should only go to 512
}
b.Save(Path.GetFileNameWithoutExtension(fileName) + ".bmp");
なぜこれが起こるのかについて私は困惑しています。なぜこれが起こり、どのように修正できますか?
(安全でないコードを改言している人には注意してください:私は作業中のプログラムの後に速いものを書くつもりです)私が始めたら3つの質問を必ず書きます!))
と
を交換することをお勧めしますが、ループに入る直前にdata.Length、幅と高さをプリントアウトするための行を追加して、あなたを編集してくださいそれらの値で質問する。私は彼らがあなたが期待するものではないと思う。 –
ところで、 "i + 1"は不要です。私は常に偶数になるので、2で割る前に1を加えても結果は変わりません。 –
まだsetPixel? 「安全でないコード」を見てください。より速いコード/プログラムの場合; –