In teoria, dovrebbe essere 65.535 x 65.535 dato che hai abbastanza memoria, circa 17 GB.Qual è la risoluzione massima di Bitmap C# .NET?
Tuttavia, creando un'applicazione di console .NET 4.5 per testarlo, lancia System.ArgumentException: il parametro non è valido.
L'applicazione è progettata per la piattaforma 64 bit. Funzionante su piattaforma 64 bit con 32 GB di memoria. La risoluzione massima che sono riuscito a ottenere è 22.000 x 22.000 pixel.
Non ho trovato alcuna documentazione su questo.
E il comportamento strano è che anche a 22.000 x 22.000 pixel, non sempre funziona. A volte funziona e a volte genera un'eccezione. Questo mi fa pensare che sia legato ad un'allocazione di memoria contigua, ma ci sono circa 30 GB di memoria libera.
Qualcuno ha qualche esperienza con questo? E se volessi lavorare con, ad esempio, un'immagine di 100.000 x 100.000 pixel e più grande, quale sarebbe il modo migliore per implementare la mia bitmap?
MODIFICA: il problema non è .NET Dimensione massima dell'oggetto. Ciò può essere risolto mediante il targeting per piattaforme a 64 bit e l'impostazione del flag gcAllowVeryLargeObjects nella configurazione dell'applicazione. In questo modo, posso ottenere l'applicazione per consumare oltre 15 GB di memoria con un singolo array di numeri interi. Finora, la risposta sembra trovarsi nella sottostante implementazione del GDI +, ma come faccio a evitarlo?
Bitmap .NET utilizza GDI +, vedere questa domanda per la discussione sulle limitazioni http://stackoverflow.com/questions/2932436/net-gdi-image-size-file-codec-limitations –
Ho disassemblato il costruttore per Bitmap (int , int) e chiama GdipCreateBitmapFromScan0, che deve restituire un codice di errore. Il costruttore Bitmap mappa i codici di errore in varie eccezioni .NET. –
Per interessi, perché dici 65.535 x 65.535? Per ['Immagine'] (http://msdn.microsoft.com/en-us/library/system.drawing.image) (che [' BitMap'] (https://msdn.microsoft.com/en-us /library/system.drawing.bitmap) è una sottoclasse di), il ['Width'] (http://msdn.microsoft.com/en-us/library/system.drawing.image.width) e [' Height Le proprietà '] (http://msdn.microsoft.com/en-us/library/system.drawing.image.height) sono tipi' int', mentre la tua domanda implica che sono 'ushort'. –