ОБСУЖДЕНИЕ

Как сжать Bmp?

2 ответов 6,4 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Есть файл bmp размером, например, 1280x960(скриншот). Надо програмно сжать до 640x480(то есть в 4 раза). Как это реализовать на c++? Если можно, напишите код с небольшим объяснением. Спасибо.
 
Смотря что за БМП у тебя. Например если bmp файлы с глубиной цвета 24 бита, байты цвета каждого пиксела хранятся в порядке BGR (Blue,Green,Red). Если с глубиной цвета 32 бита, байты цвета каждого пиксела хранятся в порядке BGRA (Blue,Green,Red,Alpha). Это все есть тут http://ru.wikipedia.org/wiki/BMP. Слово "сжать" тут неподходит, это другое. В твоем случаи нужно изменить размер(резайз или скейлинг). Обе стороны уменьшить нужно в 2 раза. Могу предложить такой вариант: береш 4 соседние точки квадратом(2 в одной строке й 2 во второй) - сумируеш каждую цветовую компоненту и среднее значение сохраняеш как новую точку в выходной картинке. Когда все обойдеш у тебя должна сформироватся выходная картинка с размерами сторон в 2 раза меньше исходной. Качество пострадает. Также могу посоветовать использовать уже готовые скейлеры, поищи в нете. В конце всего нужно будет сформировать БМП, создавши нужный хидер и записать туда выходною картинку. Вот и все.
 
После этого можно уже не жить. :)
Кому как :)

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