1

Image を Byte 配列に変換するこの関数があります。

  public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.MemoryBmp);
        return ms.ToArray();
    }

これは、関数を呼び出すための私のコードです。

  private void btn_Click(object sender, EventArgs e)
    {
       inputPath=textbox1.text;

        try
        {
            System.Drawing.Image img = Image.FromFile(inputPath);
           byte[] str= imageToByteArray(img);
         }


     catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

プログラムを実行したとき、またはイベントがトリガーされたときに、「メモリ不足」という例外がスローされます。これはなぜですか?

この関数を使用して、.jls 画像 (JPEG-LS アルゴリズムを使用して圧縮された画像) をデコードしています。つまり、これは明らかにファイルがサポートされていないことを意味しますよね? 他の代替案を知っていますか?

4

3 に答える 3

4

MSDNから:

ファイルに有効な画像形式がない場合、またはGDI +がファイルのピクセル形式をサポートしていない場合、このメソッドはOutOfMemoryException例外をスローします。

さらに:

Imageクラスは、ビットマップのアルファ透明度をサポートしていません。アルファ透明度を有効にするには、ピクセルあたり32ビットのPNG画像を使用します。

サポートされている形式の詳細については、こちらをご覧ください

于 2012-10-17T05:39:20.617 に答える
1

イメージからバイト[]にこれを試してください:

 byte[] str = File.ReadAllBytes("InputImagePath");

private void btn_Click(object sender, EventArgs e)  
    {  
       inputPath=textbox1.text;  

        try  
        {  
          byte[] str= File.ReadAllBytes("inputPath");
        }  


     catch (Exception ex)  
        {  
            MessageBox.Show(ex.Message);  
        }  
    }  
于 2012-10-17T05:45:26.687 に答える
0

メモリ不足の例外は非常に自明です。

あなたは以下を試すことができます

  • さまざまなサイズの画像を試して、システムがメモリ不足の例外を取得し始めるサイズ範囲を観察します
  • あなたを処分してみてくださいMemoryStream

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
    using(MemoryStream ms = new MemoryStream()) 
    {
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.MemoryBmp);
        return ms.ToArray();
    }
}
于 2012-10-17T05:39:35.740 に答える