Как работать с большими изображениями с помощью C # - PullRequest
1 голос
/ 23 апреля 2009

Недостаточно памяти при попытке загрузить изображения размером 20 МБ в формате jpg или 200 МБ в формате bmp

Ответы [ 3 ]

1 голос
/ 23 апреля 2009

У нас в контроле карты довольно большое (~ 50 МБ) растровое изображение.

Решение состояло в том, чтобы разрезать основное изображение на маленькие кусочки и загрузить в массив Image [,] .

            -------------------------------------
            |  pic00 |  pic01 |        |        |
            -------------------------------------
            |  pic10 |        |        |        |
pic.png ->  -------------------------------------
            |        |        |        |        |
            -------------------------------------
            |        |        |        |  picnm |
            -------------------------------------

Вы можете нарисовать эти фигуры с помощью Graphics.DrawImage (..) .

Есть только одна большая проблема: если вам нужно изображение целиком на экране, процедура рисования может быть медленной. Хороший способ сохранить миниатюру и показать ее при необходимости.

0 голосов
/ 23 апреля 2009

Если вы используете WPF, вы можете загрузить «миниатюру» изображения в память, что может быть более разумным разрешением:

BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.DecodePixelWidth = 100;
bitmapImage.UriSource = new Uri(imageData.Name);
bitmapImage.EndInit();

this.imageControl.Source = bitmapImage;
0 голосов
/ 23 апреля 2009

Я думаю, что в web.config может быть параметр, позволяющий вашему приложению использовать больше, чем объем памяти по умолчанию. В противном случае создайте пул приложений большего размера, если это веб-приложение.

Также убедитесь, что вы удаляете () ресурсы как можно скорее.

По умолчанию .net не делает никаких хитростей, чтобы повысить эффективность работы с памятью. Это неплохо само по себе, но не принесет вам пользы.

...