У меня есть a MemoryStream
из 10K, который был создан из битового массива 2 МБ и сжал использование JPEG. С тех пор MemoryStream
не может непосредственно быть помещен в System.Windows.Controls.Image
для GUI я использую следующий промежуточный код для преобразования этого назад в BitmapImage
и в конечном счете System.Windows.Controls.Image
.
Мой вопрос, когда я храню это в BitmapImage
, выделение памяти берет приблизительно 2 МБ. Это ожидается? Там какой-либо путь состоит в том, чтобы уменьшить память?
У меня есть приблизительно 300 миниатюр, и этот converstion берет приблизительно 600 МБ, который очень высок.
Цените свою справку!
Есть ли способ уменьшить объем памяти?
Да, это так: не создавайте поток памяти из самого изображения, вместо этого используйте его эскиз.
Вот пример кода, как это сделать:
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;
}
И вот более подробная информация о решении.