utkukhraman
Öğrenci
- Katılım
- 19 Mart 2016
- Mesajlar
- 3
- Reaksiyon puanı
- 0
- Puanları
- 1
- Yaş
- 23
Veri tabanına görselleri byte/image olarak kaydediyorum. Bunları nasıl jpg ya da png ye çevirebilirim?
yazdigin kodu paylasir misin?
basitce istedigin sey veritabanindan aldigin byte arrayi resime cevirmek istiyorsan
Image.FromStream(new MemoryStream(resmin byte arrayi));
private static BitmapImage LoadImage(byte[] imageData)
{
if (imageData == null || imageData.Length == 0) return null;
var image = new BitmapImage();
using (var mem = new MemoryStream(imageData))
{
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;
}
Stream obje = new MemoryStream(resimbyte);
obje.Position = 0;
using (var obje = new DispoableClass im (Senin örnekte MemoryStream oluyor))
{
----
}
...
image.EndInit();
resim.Source = image;
obje.Dispose();
benzer sorunu ben de yasamistim hocam ve büyük ihtimal ayni sorun
sorun memorystream den kaynakli.. Bir sekilde stream 0. pozisyonda degil. Stream'i, image source olarak vermeden önce index pozisyonunu sifira ayarlmana lazim
Burda örnek bir fonksiyon var, istersen kendi örnegin uyglarsin istersen direk bu metodu kullanirsin
C#:private static BitmapImage LoadImage(byte[] imageData) { if (imageData == null || imageData.Length == 0) return null; var image = new BitmapImage(); using (var mem = new MemoryStream(imageData)) { 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; }
kendi kodunu kullanmak istiyorsan ise
C#:Stream obje = new MemoryStream(resimbyte); obje.Position = 0;
yaparsan calismasi lazim..
Ancak tavsiyem ilk verdigim kod parcasindaki gibi using kelimesini kullanman. Cünkü Stream classi IDisposable interface'inden türemis (Stream Class (System.IO))
yani demek oluyor ki, nesne ile isin bitince direk olarak dispose metodunu cagirarak nesneyi bellekten kaldirabilirsin. Ancak daha kolay yol olarak
C#:using (var obje = new DispoableClass im (Senin örnekte MemoryStream oluyor)) { ---- }
using kullanmak istemiyorsan;
C#:... image.EndInit(); resim.Source = image; obje.Dispose();
seklinde bir kullanimdan sonra obje object i bellekten silinir böylece olasi problemlerden karsilasmazsin. Bazen bazi yazilimci arkadaslarda bu tür bellek hatalari meydana geliyor.. Cözümü ise bu sekilde objeyi dispose etmekten geciyor.
kolay gelsin