He algún código que hace algo como esto (bits irrelevantes snipped):.Net constructor de la clase Bitmap (int, int) y (int, int, PixelFormat) lanza ArgumentException en perfecto estado argumentos
void foo(Bitmap bmp1, Bitmap bmp2)
{
Bitmap bmp3;
if(something)
bmp3 = new Bitmap(bmp1.Width, bmp1.Height + bmp2.Height);
else
bmp3 = new Bitmap(bmp1.Width, 18000);
(more stuff here that runs fine)
}
anywho la mayor parte del tiempo esto funcionó bien. Primero. A medida que el proyecto continuó, comenzó a fallar en la nueva línea Bitmap. El error que da es: "ArgumentException no fue manejado. El parámetro no es válido". No se menciona con qué parámetro tiene un problema ni nada. Estoy perplejo. Esto es lo que sé con certeza:
- BMP1 y BMP-2 nunca han sido nula cuando se produce este error.
- La presencia de la declaración if tiene nunca marcó la diferencia; muere con la misma frecuencia sin.
- Ambos ejemplos del uso del constructor han arrojado este error.
Estoy tentado de decir que esto es un error de memoria, excepto que no menciona nada por el estilo. La primera docena de veces que sucedió esto, las alturas sumaron más de 18000 (de ahí el número mágico anterior). Pensando que era una especie de barrera blanda para nuestro sistema, limitamos las imágenes a esa altura, lo que hizo que las excepciones desaparecieran después de un tiempo.
Para algunos datos de ejemplo, la excepción que estoy viendo en este momento tiene bmp1.Width en 2550, en 6135 y bmp1.Height bmp2.Height en 6285.
Alguien tiene alguna idea?
Esto, junto con el enlace de Kyralessa, explicaba bastante el problema. Ahora solo tengo que arreglar la fuga de memoria. :(¡Gracias chicos! –
En realidad, estoy teniendo este mismo problema depurando con VisualStudio en Widows7 64 bits. Por lo tanto, un sistema operativo de 64 bits no lo previene por completo. –
Cambia la configuración de destino de la plataforma de tu proyecto EXE a AnyCPU para que realmente aproveches de un espacio de direcciones de 64 bits. –