Как сжать Bmp?

  • Автор темы MkG
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

MkG

Есть файл bmp размером, например, 1280x960(скриншот). Надо програмно сжать до 640x480(то есть в 4 раза). Как это реализовать на c++? Если можно, напишите код с небольшим объяснением. Спасибо.
 
A

abdyla_v

Смотря что за БМП у тебя. Например если bmp файлы с глубиной цвета 24 бита, байты цвета каждого пиксела хранятся в порядке BGR (Blue,Green,Red). Если с глубиной цвета 32 бита, байты цвета каждого пиксела хранятся в порядке BGRA (Blue,Green,Red,Alpha). Это все есть тут . Слово "сжать" тут неподходит, это другое. В твоем случаи нужно изменить размер(резайз или скейлинг). Обе стороны уменьшить нужно в 2 раза. Могу предложить такой вариант: береш 4 соседние точки квадратом(2 в одной строке й 2 во второй) - сумируеш каждую цветовую компоненту и среднее значение сохраняеш как новую точку в выходной картинке. Когда все обойдеш у тебя должна сформироватся выходная картинка с размерами сторон в 2 раза меньше исходной. Качество пострадает. Также могу посоветовать использовать уже готовые скейлеры, поищи в нете. В конце всего нужно будет сформировать БМП, создавши нужный хидер и записать туда выходною картинку. Вот и все.
 
A

abdyla_v

После этого можно уже не жить. :)
Кому как :)

Главное начать что то делать, а там все получится. Сейчас нету времени писать полный код. Предлагаю разбить задание на части:
1) Открытие БМП и загрузка картинки в память (исходная картинка)
2) Ресайз исходной картинки й сохранение в выходной буфер (выходная картинка)
3) Формирование БМП и сохранение выходного буфера
4) Проверка работы :)
и потихоньку начать писать на С++.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!