powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как уменьшить размер загруженной картинки в памяти?
8 сообщений из 8, страница 1 из 1
Как уменьшить размер загруженной картинки в памяти?
    #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
Как уменьшить размер загруженной картинки в памяти?
    #38193239
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, нельзя хранить большой файл в базе, и при этом не жертвовать размером базы.
Два вопроса
1. Почему нельзя хранить путь к файлу вместо самого файла?
2. Почему нельзя хранить превьюху (мелкую картинку) вместо большой?
...
Рейтинг: 0 / 0
Как уменьшить размер загруженной картинки в памяти?
    #38193263
_andrews_.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

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

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

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

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


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

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

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

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


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

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


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