1
using (MemoryStream ms = new MemoryStream(byteSource))
{
    var img = (Bitmap)Image.FromStream(ms);
}

パラメータが無効なエラーが発生します。私の質問は:byteSourceが何であるかは重要ですか?つまり、任意のバイト配列にすることができますか?それとも、すでに画像形式である必要がありますか?関数に0xffや0x00などの配列を渡す場合、長さの制限内で問題はありませんか?パラメータが無効なエラーの原因を診断しようとしています。

4

3 に答える 3

2

MSDNページで読むことができるように

パラメーター

stream 型: System.IO.Stream この Image のデータを含む Stream。

はい、バイト配列は画像でなければなりません。
そのページの詳細:

例外:
ArgumentException: ストリームに有効な画像形式がありません

于 2012-09-05T17:00:59.083 に答える
1

はい、バイトストリームは有効な画像形式である必要があります。.png、jpgまたは同様のファイル。どこbyteSourceから来ましたか?ピクセル値の配列の場合は、新しいビットマップを作成してから、を使用LockBitsしてバイトを正しい形式でコピーできる配列を取得する必要があります。

それがあなたが探しているものであるならば、これは100x100の画像をノイズで満たす例です:

Bitmap b = new Bitmap(100,100);
var bits = b.LockBits(new Rectangle(0,0,100,100), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Random rand = new Random();
var pixels = Enumerable.Range(1, 100*100).Select(n => rand.Next()).ToArray();
Marshal.Copy(pixels, 0, bits.Scan0, 100*100);
b.UnlockBits(bits);
// use the image ...
b.Save("D:\\test.png", ImageFormat.Png);

これは、ピクセルのソースが32bppArgbであることを前提としていますが、LockBitsに渡すことができる他のフォーマットオプションがあります。

于 2012-09-05T16:59:03.673 に答える
0

関連情報については、MSDN ドキュメントを確認してくださいImage.FromStream メソッド (ストリーム) :

ArgumentException ストリームに有効な画像形式がありません

于 2012-09-05T17:00:53.193 に答える