MemoryStream de BitmapSource, la necesidad de reducir el consumo de memoria
-
04-10-2019 - |
Pregunta
Tengo un MemoryStream
de 10K, que fue creado a partir de un mapa de bits de 2 MB y comprimido utilizando JPEG. Desde MemoryStream
no puede ser colocado directamente en System.Windows.Controls.Image
para la interfaz gráfica de usuario, estoy usando el siguiente código intermedio para convertir de nuevo a este BitmapImage
y eventualmente System.Windows.Controls.Image
.
Mi pregunta es, cuando almaceno en este BitmapImage
, la asignación de memoria está tomando alrededor
2 MB. Se esperaba esto? ¿Hay alguna manera de reducir la memoria?
Tengo alrededor de 300 miniaturas y esto converstion tarda alrededor de 600 MB, que es muy alto.
Agradecemos su ayuda!
Solución
¿Hay alguna manera de reducir la memoria?
Si su es:. No cree que su MemoryStream de la imagen en sí, en lugar de utilizar una miniatura de la misma
Aquí hay un código de ejemplo de cómo hacerlo:
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;
}
Aquí hay más detalles acerca de la solución.