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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top