Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
 Аватар для ZerkaloTMY
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 68

Как сжимать картинки без потери качества?

17.02.2013, 17:29. Показов 7653. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значит в Image загружаются картинки, попутно пропорционально уменьшаясь в размерах.

Как уменьшать их без потери качества?

Мне дали код, вот такой:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
BITMAP bm;
  GetObject(original_Bitmap->Handle, sizeof(BITMAP), (LPSTR)&bm);
  FIBITMAP *dib = FreeImage_Allocate(bm.bmWidth, bm.bmHeight, bm.bmBitsPixel);
  int nColors = FreeImage_GetColorsUsed(dib);
  int Success = GetDIBits
  (
    hdc,
    original_Bitmap->Handle,
    0,
    FreeImage_GetHeight(dib),
    FreeImage_GetBits(dib),
    FreeImage_GetInfo(dib),
    DIB_RGB_COLORS
  );
  FreeImage_GetInfoHeader(dib)->biClrUsed = nColors;
  FreeImage_GetInfoHeader(dib)->biClrImportant = nColors;
 
  FIBITMAP *_dib = FreeImage_Rescale
  (
    dib,
    original_Bitmap->Width * s,
    original_Bitmap->Height * s,
    FILTER_BICUBIC
  );
 
  FreeImage_Unload(dib);
 
  active_Bitmap->Handle = CreateDIBitmap
  (
    hdc,
    FreeImage_GetInfoHeader(_dib),
    CBM_INIT,
    FreeImage_GetBits(_dib),
    FreeImage_GetInfo(_dib),
    DIB_RGB_COLORS
  );
 
  FreeImage_Unload(_dib);
Но я недавно начало кодить и понятия не имею куды этот код и каким боком и в какое место... можно както так объяснить чтобы даже я поняло?

Добавлено через 24 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
BITMAP bm;
  GetObject(original_Bitmap->Handle, sizeof(BITMAP), (LPSTR)&bm);
  FIBITMAP *dib = FreeImage_Allocate(bm.bmWidth, bm.bmHeight, bm.bmBitsPixel);
  int nColors = FreeImage_GetColorsUsed(dib);
  int Success = GetDIBits
  (
    hdc,
    original_Bitmap->Handle,
    0,
    FreeImage_GetHeight(dib),
    FreeImage_GetBits(dib),
    FreeImage_GetInfo(dib),
    DIB_RGB_COLORS
  );
  FreeImage_GetInfoHeader(dib)->biClrUsed = nColors;
  FreeImage_GetInfoHeader(dib)->biClrImportant = nColors;
 
  FIBITMAP *_dib = FreeImage_Rescale
  (
    dib,
    original_Bitmap->Width * s,
    original_Bitmap->Height * s,
    FILTER_BICUBIC
  );
 
  FreeImage_Unload(dib);
 
  active_Bitmap->Handle = CreateDIBitmap
  (
    hdc,
    FreeImage_GetInfoHeader(_dib),
    CBM_INIT,
    FreeImage_GetBits(_dib),
    FreeImage_GetInfo(_dib),
    DIB_RGB_COLORS
  );
 
  FreeImage_Unload(_dib);
хм, а так
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2013, 17:29
Ответы с готовыми решениями:

Сжать картинки без потери качества JPG и PNG
Перебрал множество программ для сжатия картинок JPG и PNG так и не нашел что нужно, разные ограничения стоят, то делает чересчур медленно,...

Как залить форму без потери качества?
Хочу края иконки перекрасить в белый цвет, при заливке край отшелушивается (см.вложение), как исправить?) Как залить без потери качества? ...

Как перекодировать mkv в avi без потери качества?
Я скачал фильм в формате mkv, а мне нужно чтоб он был в avi. Я попробовал перекодировать его с помощью MediaCoder, но фильм получился плохо...

14
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
17.02.2013, 19:39
Нельзя уменьшить картинку без потери качества. На то оно и уменьшение.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.02.2013, 20:27
Цитата Сообщение от gumi250 Посмотреть сообщение
Нельзя уменьшить картинку без потери качества. На то оно и уменьшение.
Ну, почему же... . Обычные архиваторы rar или zip после распаковки вернут картинку в целости и сохранности (это если вообще. А по смыслу вопроса вы правы, наверное. Хотя gif, мне кажется, пакует без потери, но только цветов - 256) ...
0
 Аватар для ZerkaloTMY
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 68
17.02.2013, 20:38  [ТС]
Тут имеется ввиду не сам файл а картинку в интерфейсе программы (в компоненте Image).

Когда компонент имедж меньше реального размера картинки и stretch поставлен true.

Оно уменьшает с такими некрасивыми точечками или артефактами, не знаю как это правильно назвать.

Можно ли как-то их убрать?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 21:18
Цитата Сообщение от gumi250 Посмотреть сообщение
Нельзя уменьшить картинку без потери качества. На то оно и уменьшение.
Легко и просто если вы про сжатие
0
 Аватар для ZerkaloTMY
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 68
17.02.2013, 21:30  [ТС]
Avazart, как?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 21:36
Цитата Сообщение от nick42 Посмотреть сообщение
Ну, почему же... . Обычные архиваторы rar или zip после распаковки вернут картинку в целости и сохранности (это если вообще. А по смыслу вопроса вы правы, наверное. Хотя gif, мне кажется, пакует без потери, но только цветов - 256) ...
При этом потери могут быть, но они могут быть незаметными для глаза человека, это от алгоритма сжатия зависит.

Добавлено через 3 минуты
Цитата Сообщение от ZerkaloTMY Посмотреть сообщение
Когда компонент имедж меньше реального размера картинки и stretch поставлен true.
Оно уменьшает с такими некрасивыми точечками или артефактами, не знаю как это правильно назвать.
Можно ли как-то их убрать?
Тут наверное речь о "сглаживании", но подозреваю что картинка изначально фигового качества поэтому и артефакты...
0
 Аватар для ZerkaloTMY
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 68
17.02.2013, 22:58  [ТС]
Avazart, ясненько, благодарю, полагаю, придется поуменьшать все картинки в графическом редакторе.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.02.2013, 23:00
А картинки какого формата ?
0
 Аватар для ZerkaloTMY
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 68
17.02.2013, 23:10  [ТС]
Avazart, jpg
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.02.2013, 00:34
Ну так чего жаловаться там ведь вроде изображение уже сжато... пробуй bmp.

Добавлено через 1 минуту
Алгоритм JPEG позволяет сжимать изображение как с потерями, так и без потерь (режим сжатия lossless JPEG). Поддерживаются изображения с линейным размером не более 65535 × 65535 пикселей.
http://ru.wikipedia.org/wiki/JPEG

С другой стороны, JPEG малопригоден для сжатия чертежей, текстовой и знаковой графики, где резкий контраст между соседними пикселами приводит к появлению заметных артефактов. Такие изображения целесообразно сохранять в форматах без потерь, таких как TIFF, GIF или PNG.
Вполне возможно Builder не умеет его обрабатывать его корректно при сжатиях - растяжениях ( а скорее всего просто преобразовывает в bmp )

Кстати не обратил сразу внимание - где вы надыбали такой код ? Он из WinApi почему не использовали VCL
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
18.02.2013, 03:19
Цитата Сообщение от Avazart Посмотреть сообщение
Легко и просто если вы про сжатие
На сколько я понимаю, здесь речь не о сжатии картинки, а об уменьшении ее размера. Т.е. была картинка 1000х1000, а хочется показать ее на форме как 100х100. При этом, ТС хочет чтобы 100х100 была столь же качественна как и 1000х1000, но 100х100 всегда менее качественна чем 1000х1000. Или я чего не так понял.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
18.02.2013, 11:15
Цитата Сообщение от Avazart Посмотреть сообщение
где вы надыбали такой код ? Он из WinApi почему не использовали VCL
это я его дал код применять в соответствии с понятием "растянуть картинку с минимальным внесением "грязи" в рисунок", а не с понятием "получить картинку которая весит меньше". например StretchDraw ужасно ведет себя и при уменьшении и при увеличении картины - при уменьшении какие то левые пиксели появляются неудачно попавшие в новую размерную сетку (я так понимаю там используется алгоритм "ближайший пиксель"), при увеличении заметно деление на кубики. естественно приведенный алгоритм не панацея, но является пределом из возможного.
0
 Аватар для ZerkaloTMY
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 68
18.02.2013, 13:20  [ТС]
vxg, вот вот! Именно это. Теперь еще было бы прекрасно если бы Вы, милостивый государь, сказали куда этот код тыкать чтобы оно работало))))))) а то Вы же сами понимаете, что я - ацкий программист)))
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
18.02.2013, 13:39
вот откуда это было взято
Программа клиент-сервер
смотрим, размышляем (качать сервер)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2013, 13:39
Помогаю со студенческими работами здесь

Как уменьшить вес изображения без потери качества?
Скачал с сайта изображение, 200x50px, png. Перерисовываю его, сохраняю в том же разрешении. Проблема в том, что при увеличении моего...

Как перевести PNG в CVG без потери качества?
Друзья, специалисты, скажите, возможно ли перевести PNG формат в CVG? Вот почему спрашиваю, есть картинка после Фотошоп, она в формате...

Как преобразовать документ Word в JPG без потери качества?
Доброго времени суток, у меня следующий вопрос, подскажите пожалуйста: Как фрагмент документа Word (или целую страницу) преобразовать...

Как заменить звук FLV(mp4) без потери качества видео
Доброго времени суток! Имеется видео формат FLV потому как было скачано с ютуба качество 800x480, в это видео необходимо подставить...

Как загрузить фото на хостинг без потери качества при уменьшении изображения?
Как партнерки и другие сайты загружают фото, Баннеры и тизеры на свой хостинг с помощью каких скриптов или программ без потери качества...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru