public Bitmap Foo (string r1, string r2)
{
Bitmap bmap = new Bitmap(r1);
Bitmap bmap2 = new Bitmap(r2);
Bitmap bmap2 = new Bitmap(r2);
Bitmap bmapR = new Bitmap(bmap.Width, bmap.Height, bmap.PixelFormat);
// hacer cosas, muchas muchas cosas con bmap y bmap2, y la imagen resultante va a bmapR
bmap.Dispose();
bmap2.Dispose();
bmap2.Dispose();
return bmapR;
}
El problema es que un mapa de bits consume una cantidad considerable de memoria, además todas esas muchas cosas sólo quiero hacerlas si bmap y bmap2 tienen las mismas dimensiones, además que bmapR sólo se crearía para este caso. Se podría programar un método intermedio que llamaría al método Foo sólo si se cumple la condición, pero eso implicaría crear bmap y bmap2 en este método.
Esta manera de solucionarlo ya no me estaba convenciendo.
Entonces recordé que en .Net todo es un objeto, y como tal todo puede tener un valor nulo. ¿Y si retorno un valor nulo (null) en lugar de un bitmap si la condición de las dimensiones iguales no se cumple? Luego podría evaluar si se devolvío un valor nulo o no.
Mi método modificado resultó ser:
public Bitmap Foo (string r1, string r2)
{
Bitmap bmap = new Bitmap(r1);
Bitmap bmap2 = new Bitmap(r2);
Bitmap bmap2 = new Bitmap(r2);
{
bmap.Dispose();
bmap2.Dispose();
return null;
}
Bitmap bmapR = new Bitmap(bmap.Width, bmap.Height, bmap.PixelFormat);
// hacer cosas, muchas muchas cosas con bmap y bmap2, y la imagen resultante va a bmapR
bmap.Dispose();
bmap2.Dispose();
bmap2.Dispose();
return bmapR;
}
Y la forma de llamarla es:
private void Metodo()
{
UnaClase M = new UnaClase();Bitmap bt = M.Foo(ruta1, ruta2);
if (bt == null)
MessageBox.Show("Las imágenes deben tener las mismas dimensiones");
else
pictureBox.Image = bt;
// bt.Dispose(); Esta lìnea es mejor omitirla pues da problemas si está en el evento Click de un botón
}
¡Funciona! Y me evito crear tres mapas de bits cuando no los necesito.
:D
No hay comentarios:
Publicar un comentario