PDA

View Full Version : حرفه ای: بازیابی عکس در wpf



زهرادلدوز
شنبه 18 آذر 1396, 17:59 عصر
سلام من میخوام عکس های ذخیره شده در دیتابیس رو بازیابی کنم ولی نمیدونم چرا ارور میده
کدهای تابع بازیابی عکس به صورت زیر

private void Showimage()
{ try
{
object item = GrdLater.SelectedItem;
_id = int.Parse((GrdLater.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text);
var query = from p in db.Pictures where p.idlatter == _id select p;
var result = query.ToList();
MessageBox.Show(result.Count.ToString());


if (result[0].Pic != null)
{
for (i = 1; i <= result.Count; i++)
{
byte[] imagearray = (byte[])result[0].Pic;
MemoryStream ms = new MemoryStream();
ms.Write(imagearray, 0, imagearray.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
BitmapImage bi = new BitmapImage();
bi.BeginInit();


MemoryStream mss = new MemoryStream();
image.Save(mss, System.Drawing.Imaging.ImageFormat.Bmp);
mss.Seek(0, SeekOrigin.Begin);
bi.StreamSource = ms;
bi.EndInit();




image1.Source = bi;




}
}
}
catch(Exception ex)
{
MessageBox.Show("در بازیابی عکس مشکلی به وجود آمده است"+ex);
}



}
ومتن ارور هم اینه :
An exception of type 'System.IO.FileFormatException' occurred in PresentationCore.dll but was not handled in user code


Additional information: The image cannot be decoded. The image header might be corrupted.
دقیقا روی کد

bi.EndInit();

ارور میده لطفا هرکه میتونه کمک کنه .من نمیدونم چیکار باید کنم؟

زهرادلدوز
یک شنبه 19 آذر 1396, 20:00 عصر
کسی نمیتونه کمک کنه ؟ اگه برای بازیابی تصاویر در wpf راه دیگه ای بلدید بفرمایید تا از اون راه استفاده کنم

ژیار رحیمی
دوشنبه 20 آذر 1396, 02:51 صبح
//تبدیل تصویر به آرایه ای از بایت ها
public byte[] ImageToByteArray(BitmapImage image)
{
MemoryStream memStream = new MemoryStream();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(image));
encoder.Save(memStream);
return memStream.ToArray();

}
//تبدیل آرایه ایی از بایت ها به تصویر
public BitmapImage ByteArrayToImage(byte[] imageArray)
{
if (imageArray == null || imageArray.Length == 0) return null;
var image = new BitmapImage();
using (var mem = new MemoryStream(imageArray))
{
mem.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.StreamSource = mem;
image.EndInit();
}
image.Freeze();
return image;
}

فراخوانی

image1.Source = ByteArrayToImage((byte[]) result[0].Pic);