3

C# で memorystream を使用して画像を保存しようとすると、以下のエラーが発生します。エラーは、バイト配列 byteImageData の長さが 24000 に等しい場合にのみスローされます。それ以外の場合、コードは正常に動作しています。以下はコード スニペットです。

string strDbConn = string.Empty;
string strImageFileName = string.Empty;
string strImageData = string.Empty;
DataSet imageDS = new DataSet();
Byte[] byteImageData = new Byte[0];
Image saveImage;
string strImgSavePath = string.Empty;
try
{
    //---open the database connection
    strDbConn = ConfigurationSettings.AppSettings["DBConnection"].ToString().Trim();
    SqlConnection dbcon = new SqlConnection(strDbConn);
    dbcon.Open();
    SqlDataAdapter imageSqlDataAdapter = new SqlDataAdapter("select * from image_data", dbcon);
    imageSqlDataAdapter.Fill(imageDS);
    dbcon.Close();
    for (int i = 0; i < imageDS.Tables[0].Rows.Count; i++)
    {
        strImageFileName = imageDS.Tables[0].Rows[i]["name"].ToString().Trim();
        strImageData = imageDS.Tables[0].Rows[i]["signature_vod__c"].ToString().Trim();
        //converting string to byte array
        byteImageData = Convert.FromBase64String(strImageData);
        //---create Memory stremm from the Image Byte data
        MemoryStream stmImageData = new MemoryStream(byteImageData);
        //--saving the image
        saveImage = Image.FromStream(stmImageData);
        strImgSavePath = ConfigurationSettings.AppSettings["ImageSavePath"].ToString().Trim();
        saveImage.Save(strImgSavePath + strImageFileName + ".jpeg"); // error comes here
        //stmImageData.Close();
    }
}
catch (Exception ex)
{

}

スローされるエラーは次のとおりです。

Messgae = A generic error occurred in GDI+. 
Inner Exception = null 

スタックトレース:

at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
   at System.Drawing.Image.Save(String filename, ImageFormat format)
   at System.Drawing.Image.Save(String filename)
   at VeevaImageApp.Program.CreateAndSaveImageusingDataSet2() in Program.cs:line 141

バイト配列 byteImageData の長さが 24000 の場合にのみエラーが発生します。それ以外の場合、コードはファイルを動作させます - 問題の可能性と解決方法を教えてください。

4

1 に答える 1

0

画像データの形式は?既に JPG の場合は、そのまま使用する必要がありますFile.WriteAllBytes(path, byteImageData)。本当に変換が必要な場合は、新しい画像エンコーダー/デコーダー クラスを使用する必要があります。Web で JpegBitmapEncoder または PngBitmapEncoder に関する情報を検索してください。(これらが写真であるか、JPEG をスキャンする場合、それ以外の場合は PNG を使用します。)

于 2012-10-25T16:08:05.550 に答える