MemoryStream от BitmapSource, необходимо уменьшить потребление памяти - PullRequest
1 голос
/ 21 мая 2010

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

У меня вопрос, когда я сохраняю это в BitmapImage, распределение памяти занимает около 2MB. Это ожидается? Есть ли способ уменьшить память?

У меня около 300 миниатюр, и этот разговор занимает около 600 МБ, что очень много.

Ценю вашу помощь!

1 Ответ

2 голосов
/ 21 мая 2010

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

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

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

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

И вот подробности о решении.

...