Я пытаюсь написать небольшое приложение для просмотра изображений. Однако с .NET существуют ограничения системной памяти.
При попытке загрузить большие растровые изображения ( 9000 x 9000 px или больше, 24-бит), я получаю исключение System.OutOfMemoryException. Это на ПК с Windows 2000 с 2 ГБ оперативной памяти (из которых 1,3 ГБ используется). Это также занимает много времени, чтобы попытаться загрузить файлы.
Следующий код генерирует эту ошибку:
Image image = new Bitmap(filename);
using (Graphics gfx = this.CreateGraphics())
{
gfx.DrawImage(image, new Point(0, 0));
}
Как и этот код:
Stream stream = (Stream)File.OpenRead(filename);
Image image = Image.FromStream(stream, false, false);
using (Graphics gfx = this.CreateGraphics())
{
gfx.DrawImage(image, new Rectangle(0, 0, 100, 100), 4000, 4000, 100, 100, GraphicsUnit.Pixel);
}
Кроме того, достаточно сделать следующее:
Bitmap bitmap = new Bitmap(filename);
IntPtr handle = bitmap.GetHbitmap();
Последний код предназначен для использования с GDI. Изучая это, я обнаружил, что на самом деле это проблема с памятью, где .NET пытается выделить в два раза больше, чем это необходимо в одном непрерывном блоке памяти.
http://bytes.com/groups/net-c/279493-drawing-large-bitmaps
Я знаю из других приложений (Internet Explorer, MS Paint и т.д.), что можно открывать большие изображения и довольно быстро. Мой вопрос: как использовать большие растровые изображения с .NET?
Есть ли все равно, чтобы передать их или загрузить их без памяти?