Как сжать Bmp?

Тема в разделе "Общие вопросы по С и С++", создана пользователем MkG, 22 май 2010.

Статус темы:
Закрыта.
  1. MkG

    MkG Гость

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

    abdyla_v Гость

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

    abdyla_v Гость

    Кому как :)

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

Поделиться этой страницей