Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как уменьшить размер загруженной картинки в памяти? / 8 сообщений из 8, страница 1 из 1
21.03.2013, 14:11
    #38193214
_andrews_.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
пользователь выбирает логотип своей компании и он (логотип) сохраняется в BLOB (byte array).
Если сохранить большую картинку (*.PNG на 150Мб, 7200x4200) то при следующем считывании это картинки сильно увеличивается потребление памяти:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        public static Bitmap GetPNGBitmap(BitmapSource bitmapsource)
        {
            Bitmap bitmap;
            using (var stream = new MemoryStream())
            {
                // from System.Media.BitmapImage to System.Drawing.Bitmap 
                var enc = new PngBitmapEncoder();
                enc.Frames.Add(BitmapFrame.Create(bitmapsource));
                enc.Save(stream);
                bitmap = new Bitmap(stream);
            }
            return bitmap;
        }



Эта картинка показывается в маленьком окошке (5x5 см) поэтому хотелось бы его уменьшить и в размерах и в объемах, сделать более легким, чтобы и качество не потерялось, и памяти потреблялось меньше. Но делать это при загрузке из базы. Т.е. чтобы в базе хранилась все же оригинальная (большая) картинка.

Как это сделать?
...
Рейтинг: 0 / 0
21.03.2013, 14:19
    #38193239
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
Наверное, нельзя хранить большой файл в базе, и при этом не жертвовать размером базы.
Два вопроса
1. Почему нельзя хранить путь к файлу вместо самого файла?
2. Почему нельзя хранить превьюху (мелкую картинку) вместо большой?
...
Рейтинг: 0 / 0
21.03.2013, 14:30
    #38193263
_andrews_.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
Pallaris,

На данном этапе проблема не в размере базы
а в потребляемой памяти при конвертации BitmapSource в Bitmap
При печати нескольких отчетов (Telerik.Reporting) на которых есть этот логотип часто происходит Out Of Memory

поэтому
Pallaris1. Почему нельзя хранить путь к файлу вместо самого файла?

этот вариант не решит проблему

Pallaris2. Почему нельзя хранить превьюху (мелкую картинку) вместо большой?


этот вариант решит. Но все же хотелось знать как это сделать "на лету" из кода.
Т,е. примем за основу что в базе уже лежит большая картинка. А ее надо уменьшить при загрузке.
...
Рейтинг: 0 / 0
21.03.2013, 14:31
    #38193266
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
_andrews_.,

ну обрежте. на этом форуме полно таких тем
вот одна из них
...
Рейтинг: 0 / 0
21.03.2013, 14:38
    #38193287
_andrews_.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
beg-in-er_andrews_.,

ну обрежте. на этом форуме полно таких тем
вот одна из них
что значт "обрежьте"?
Мне не надо ничего обрезать. Мне надо уменьшить ЦЕЛУЮ картинку.
Мне кусок картинки не нужен. :-)
...
Рейтинг: 0 / 0
21.03.2013, 14:46
    #38193310
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
_andrews_.,

авторНа данном этапе проблема не в размере базы


Я думаю, задуматься о будущем размере базы не помешает уже сейчас (ну, если планируется ее интенсивно использовать)

Как на лету менять размер изображения - ну, наверняка есть какие-то библиотеки, которые умеют менять разрешение картинки.
...
Рейтинг: 0 / 0
21.03.2013, 16:00
    #38193513
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
_andrews_.пользователь выбирает логотип своей компании и он (логотип) сохраняется в BLOB (byte array).
Если сохранить большую картинку (*.PNG на 150Мб, 7200x4200) то при следующем считывании это картинки сильно увеличивается потребление памяти:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        public static Bitmap GetPNGBitmap(BitmapSource bitmapsource)
        {
            Bitmap bitmap;
            using (var stream = new MemoryStream())
            {
                // from System.Media.BitmapImage to System.Drawing.Bitmap 
                var enc = new PngBitmapEncoder();
                enc.Frames.Add(BitmapFrame.Create(bitmapsource));
                enc.Save(stream);
                bitmap = new Bitmap(stream);
            }
            return bitmap;
        }




Эта картинка показывается в маленьком окошке (5x5 см) поэтому хотелось бы его уменьшить и в размерах и в объемах, сделать более легким, чтобы и качество не потерялось, и памяти потреблялось меньше. Но делать это при загрузке из базы. Т.е. чтобы в базе хранилась все же оригинальная (большая) картинка.

Как это сделать?
GetThumbnailImage
...
Рейтинг: 0 / 0
21.03.2013, 19:07
    #38193851
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как уменьшить размер загруженной картинки в памяти?
pationGetThumbnailImage
Я это пробовал, не понравилось.


докаМетод GetThumbnailImage работает без проблем, когда размеры запрошенного эскиза равны приблизительно 120 x 120 пикселей. Если запросить эскиз большого размера (например, 300 x 300) из объекта Image, который имеет внедренный эскиз, возможна заметная потеря качества изображения эскиза. Возможно, лучше будет масштабировать основное изображение (вместо изменения масштаба внедренного эскиза) с помощью вызова метода DrawImage.



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private Image resizeImage(Image srcImg, int widthNew, int heightNew)
        {
            Bitmap newBitmap = new Bitmap(widthNew, heightNew);
            Graphics g = Graphics.FromImage(newBitmap);
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

            g.DrawImage(srcImg, 0, 0, widthToUse, heightToUse);

            return newBitmap;
        }
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как уменьшить размер загруженной картинки в памяти? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]