سؤال

انا املك 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;
            }

و هنا المزيد من التفاصيل حول الحل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top