MemoryStream от BitmapSource, должен уменьшить потребление памяти

У меня есть a MemoryStream из 10K, который был создан из битового массива 2 МБ и сжал использование JPEG. С тех пор MemoryStream не может непосредственно быть помещен в System.Windows.Controls.Image для GUI я использую следующий промежуточный код для преобразования этого назад в BitmapImage и в конечном счете System.Windows.Controls.Image.

Мой вопрос, когда я храню это в BitmapImage, выделение памяти берет приблизительно 2 МБ. Это ожидается? Там какой-либо путь состоит в том, чтобы уменьшить память?

У меня есть приблизительно 300 миниатюр, и этот converstion берет приблизительно 600 МБ, который очень высок.

Цените свою справку!

1
задан Dave Clemmer 10 August 2011 в 23:37
поделиться

1 ответ

Есть ли способ уменьшить объем памяти?

Да, это так: не создавайте поток памяти из самого изображения, вместо этого используйте его эскиз.

Вот пример кода, как это сделать:

        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;
            }

И вот более подробная информация о решении.

2
ответ дан 3 September 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: