0

重複の可能性:
GDI+ 一般エラー

私は db アプリケーションを作成しており、「sdf」ファイルをデータベースとして使用しています。次のコードでイメージをバイト配列に変換して、DB にイメージを保存します。

byte[] ReadFile(string sPath)
    {

        //Initialize byte array with a null value initially.
        byte[] data = null;

        //Use FileInfo object to get file size.
        FileInfo fInfo = new FileInfo(sPath);
        long numBytes = fInfo.Length;

        //Open FileStream to read file
        FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);

        //Use BinaryReader to read file stream into byte array.
        BinaryReader br = new BinaryReader(fStream);

        //When you use BinaryReader, you need to supply number of bytes to read from file.
        //In this case we want to read entire file. So supplying total number of bytes.
        data = br.ReadBytes((int)numBytes);
        return data;
    }

そしてそれをデータベースに挿入します。

私はこのコードを介して画像を取得します:

public static Image CreateImage(byte[] imageData)
    {
        Image image=null;
        if(imageData !=null)
        {
            using (MemoryStream inStream = new MemoryStream())
            {
                  inStream.Write(imageData, 0, imageData.Length);

                  image = Bitmap.FromStream(inStream);
            }
        }


        return image;
    }

そして、pictureBox Image を CreateImage 戻り値に割り当てます。

ここまでは問題ありませんが、pictureBox イメージをディスクに保存したい場合

 Bpicture.Image.Save(@"pic1.jpeg", ImageFormat.Jpeg);

このエラーが発生します:

An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll

Additional information: A generic error occurred in GDI+.

また、データベースではなくディスクからイメージをロードしても、このエラーは発生しません

4

1 に答える 1

0

コードを変更してみてください:

inStream.Write(imageData, 0, imageData.Length);
inStream.Seek(0, SeekOrigin.Begin);
image = Bitmap.FromStream(inStream);

stream は、書き込まれたばかりの配列を読み取るために先頭に移動する必要があるポインターを持つ特定の構造です。

于 2012-11-27T13:45:34.923 に答える