MemoryStream من Bitmapsource ، تحتاج إلى تقليل استهلاك الذاكرة
-
04-10-2019 - |
سؤال
انا املك MemoryStream
من 10K الذي تم إنشاؤه من صورة نقطية 2 ميجابايت وضغط باستخدام JPEG. حيث MemoryStream
لا يمكن وضعها مباشرة في System.Windows.Controls.Image
بالنسبة إلى واجهة المستخدم الرسومية ، أستخدم الكود الوسيط التالي لتحويل هذا مرة أخرى BitmapImage
وفي النهاية System.Windows.Controls.Image
.
سؤالي هو ، عندما أقوم بتخزين هذا في BitmapImage
, ، تخصيص الذاكرة يستغرق حوالي 2 ميغابايت. هل هذا متوقع؟ هل هناك أي طريقة لتقليل الذاكرة؟
لديّ حوالي 300 صورة مصغرة ويستغرق هذا التقاطع حوالي 600 ميجابايت ، وهو مرتفع للغاية.
نقدر مساعدتكم!
المحلول
هل هناك أي طريقة لتقليل الذاكرة؟
نعم هم: لا تنشئ MemoryStream من الصورة نفسها ، وبدلاً من ذلك استخدم صورة مصغرة منه.
فيما يلي نموذج رمز لكيفية القيام بذلك:
private void button1_Click(object sender, EventArgs e)
{
Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
Bitmap myBitmap = new Bitmap(@"C:\Documents and Settings\Sameh\My Documents\My Pictures\Picture\Picture 004.jpg"); //3664 x 2748 = 3.32 MB
Image myThumbnail = myBitmap.GetThumbnailImage(myBitmap.Width / 100, myBitmap.Height / 100 , myCallback, IntPtr.Zero);
//now use your thumbnail as you like
myThumbnail.Save(@"C:\Documents and Settings\Sameh\My Documents\My Pictures\Picture\Thumbnail 004.jpg");
//the size of the saved image: 36 x 27 = 2.89 KB
//you can create your memory stream from this thumbnail now
}
public bool ThumbnailCallback()
{
return false;
}
و هنا المزيد من التفاصيل حول الحل.