2011-06-13 20 views

Respuesta

30

Tenga en cuenta que hay mucha memoria que está intentando asignar con ese mapa de bits.

Consulte http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/37684999-62c7-4c41-8167-745a2b486583/

.NET es probable niega a crear una imagen que utiliza hasta que la cantidad de memoria contigua a la vez.

poco más difícil de leer, pero esta referencia también ayuda:

http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.drawing/2005-06/msg00176.html

Each image in the system has the amount of memory defined by this formula:

bit-depth * width * height/8

This means that an image 40800 pixels by 4050 will require over 660 megabytes of memory.

5

Sospecho que está golpeando los problemas del límite de memoria. Sin embargo, hay muchas razones por las que un constructor de mapa de bits puede fallar. Los principales se enumeran en this Knowledge Base article hablando de los límites de GDI + en CreateBitmap. System.Drawing.Bitmap, internamente, usa la API nativa de GDI cuando se construye el mapa de bits.

Dicho esto, un mapa de bits de ese tamaño supera ampliamente un GB de RAM, y es probable que esté alcanzando la limitación del tamaño de la línea de escaneo (64 KB) o se esté quedando sin memoria.

4

19000 píxeles cuadrados, a 32 bpp, requeriría 11552000000 bits (1,37 GB) para almacenar el ráster en la memoria. Eso es solo la información en bruto de píxeles; cualquier sobrecarga adicional inherente a System.Drawing.Bitmap se agregaría a eso. Subir a 20k píxeles cuadrados a la misma profundidad de color requeriría 1.5GB solo para la memoria de píxel bruto. En un solo objeto, está utilizando 3/4 del espacio reservado para toda la aplicación en un entorno de 32 bits. Un entorno de 64 bits tiene límites más flexibles (por lo general), pero todavía está utilizando 3/4 del tamaño máximo de un solo objeto.

¿Por qué necesita un tamaño de imagen tan colosal? Visto a 1280x1024 res en un monitor de computadora, una imagen de 19000 píxeles en un lado sería de 14 pantallas de ancho por 18 pantallas de alto. Solo puedo imaginar que está haciendo gráficos impresos de alta calidad, en cuyo caso una imagen de 720 ppp sería un póster cuadrado de 26 "

+4

"¿Por qué necesita un tamaño de imagen tan colosal?" Una posible razón: puede estar cargando un archivo de imagen en un objeto Bitmap, que luego quiere redimensionar más pequeño. –

0

Encontré este error al abrir un archivo TIF. El problema se debía a que no se podía abrir CMYK espacio de color cambió de RGB a CMYK y no conseguir un error

por lo que utiliza taglib biblioteca para obtener el tamaño de archivo de imagen en lugar

ejemplo de código:...

try 
{ 
    var image = new System.Drawing.Bitmap(filePath); 
    return string.Format("{0}px by {1}px", image.Width, image.Height); 
} 
catch (Exception) 
{ 
    try 
    { 
     TagLib.File file = TagLib.File.Create(filePath); 
     return string.Format("{0}px by {1}px", file.Properties.PhotoWidth, file.Properties.PhotoHeight); 
    } 
    catch (Exception) 
    { 
     return (""); 
    } 
} 
2

Ajuste el PixelFormat cuando Eres nuevo en un mapa de bits, como:

new Bitmap(2000, 40000,PixelFormat.Format16bppRgb555) 

y con el número exacto arriba, funciona para mí. Esto puede en parte resolver el problema.

+0

¿Por qué funciona esto? – ValarMorghulis

Cuestiones relacionadas