0

画像をピクチャボックスからバイト配列に変換しています

   public static byte[] ImageToByte(Image img)
    {
        ImageConverter converter = new ImageConverter();
        return (byte[])converter.ConvertTo(img, typeof(byte[]));
    }

次に、バイト配列を次のように画像に変換します

  public static Image byteArrayToImage(byte[] imageData)
    {
        try
        {
            Image image;
            using (MemoryStream inStream = new MemoryStream())
            {
                inStream.Write(imageData, 0, imageData.Length);
                image = Bitmap.FromStream(inStream);
            }
            return image;
        }
        catch { throw; }
    }

ここで初めて、データを保存する前に、ファイルをローカル システムから画像ボックスに次のようにアップロードします。

       openFileDialog1.Filter = "JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg";
        if (openFileDialog1.ShowDialog() != DialogResult.Cancel)
        {

            Image pic = Image.FromFile(openFileDialog1.FileName);
            pboxPhoto.Image = pic;
        }

データをデータベースに保存するのは初めてで、100%動作しています。データを取得するとき、取得したバイト配列から画像にデータを変換し、picturebox にアタッチしています。今まではすべて問題ありません。今度はすべてのレコードを更新したいのですが、今回は ImagetoByte arrat メソッドが次のように例外をスローしています。

A generic error occurred in GDI+.

したがって、私の問題は、ローカルシステムから画像をアップロードすると変換されますが、バイト配列を画像に変換してから画像をバイト配列に変換しようとすると、メソッドが上記の例外をスローすることです。ありがとうございました..

4

1 に答える 1

1

byteArrayToImage問題は、を破棄するときにビットマップの基になるストリームを閉じることですMemoryStream

Bitmap.FromStreamそのドキュメントの発言が言うように、これを行うべきではありません

イメージの存続期間中、ストリームを開いたままにしておく必要があります。

Image.FromFile同様に動作し、画像が破棄されるまでファイルをロックしたままにします。

于 2013-06-01T05:55:59.853 に答える