PDA

View Full Version : مشکل در تبدیل آرایه بایتها به عکس



winner1
پنج شنبه 18 تیر 1394, 12:20 عصر
سلام بکس آقا من عکسی که تو بانک اطلاعاتی ذخیره کردم وقتی میام میخونمش و میخوام اون رو ارسال کنم به سمت استیمول ریپورت یه استثنا تولید میکنه که مسیجش اینه :
A generic error occurred in GDI+.
بعد این اتفاق یه جا دیگم میفته اونم وقتی که من عکس رو از بانک میخونم میدم به یه کنترل پیکچر باکس و بعد همون عکس پیکچر باکس رو دوباره میخوام به باینری تبدیل کنم بازم این استثنا میاد
این کد های تبدیل من به باینری و بلعکس :


/// <summary>
/// Convert a image to byte type to save in databases
/// </summary>
/// <param name="imgData">a Image data value that passing image to convert</param>
/// <returns>a array of byte datas that passing image bytes</returns>
public static byte[] ConvertImageToByte(Image imgData)
{
if (imgData == null)
{
throw new NullReferenceException("Chech Image Value Your Data Is Null.");
}
byte[] imgArray;
using (MemoryStream msImage = new MemoryStream())
{
imgData.Save(msImage, System.Drawing.Imaging.ImageFormat.Jpeg);
imgArray = msImage.ToArray();
}
return imgArray;
}
/// <summary>
/// Convert a array of bytes to a image data value
/// </summary>
/// <param name="imgArray">a array of byte data values that passing byte of image</param>
/// <returns>a image data value that passing result image data value</returns>
public static Image ConvertByteToImage(byte[] imgArray)
{
if (imgArray.Length == 0)
{
throw new NullReferenceException("Chech Image Array Value Your Array Is Null.");
}
Image imgResult;
using (MemoryStream msImage = new MemoryStream(imgArray))
{
imgResult = Image.FromStream(msImage);
}
return imgResult;
}

دمتون گرم راهنمایی لطفا؟

davidrobert
پنج شنبه 18 تیر 1394, 12:43 عصر
من برای اینکه تتصویری که دارم در دیتابیس رو بفرستام برای چاپ این کار رو میکنم اول اون تصویر رو داخل کادر تصویر فرم نمایش میدم و بعد میام اون تصویر رو میگیرم و میفرستم به استیمول ولی یه ابزار تصویر قرار میدم و اسم روش میزارم و از طریق استیمول که تصویر رو بهش ارسال کردم نمایش میده.
این کد ارسال تصویر برای چاپ (stiReport.GetComponentByName("pictureBox1") as StiImage).Image = pictureBox1.Image;

winner1
پنج شنبه 18 تیر 1394, 12:58 عصر
مسله اینجاست جز نمایش اون عکس تو کنترل پیکچرباکس سی شارپ هیچ جای دیگه نمیتونم استفاده کنم ( منظورم بایت هایی هست که از بانک خوندم و به تصویر تبدیل کردم) نه میتونم جایی ذخیرش کنم نه به جز پیکچر باکس سی شارپ جایی نمایش بدم همش استثنای زیر رو میده :

A generic error occurred in GDI+.

davidrobert
پنج شنبه 18 تیر 1394, 14:45 عصر
شما میخواهید اون تصویر رو که داخل کادر تصور هستش بیرون باز ذخیره کنید.یعنی روی ویندزتون میخواهید ذخیره کنید.

Mahmoud.Afrad
پنج شنبه 18 تیر 1394, 17:05 عصر
در متد ConvertByteToImage چون از using استفاده کردی وقتی برنامه به خط return imgResult; میرسه دیگه استریم از بین رفته و چون تصویر imgResult به استریم وابسته هست با از بین رفتن استریم استثنا رخ میده.
یک bitmap بساز و اونو return کن.

using (MemoryStream memoryStream = new MemoryStream(imgArray))
{
imgResult = new Bitmap(Image.FromStream(memoryStream));
}

winner1
پنج شنبه 18 تیر 1394, 17:23 عصر
در متد ConvertByteToImage چون از using استفاده کردی وقتی برنامه به خط return imgResult; میرسه دیگه استریم از بین رفته و چون تصویر imgResult به استریم وابسته هست با از بین رفتن استریم استثنا رخ میده.
یک bitmap از روی imgResult بساز و اونو return کن.

using (MemoryStream memoryStream = new MemoryStream(imgArray))
{
imgResult = new Bitmap(Image.FromStream(memoryStream));
}


ممنون استاد حل شد