Как сделать изображение bmp
Формат и чтение BMP файла (BMP format)
Создайте в графическом редакторе PAINT растровое изображение размером 50*35 пикселов. Выберите максимальный масштаб изображения и включите сетку. Сохраните рисунок в формате BMP как монохромный (файл 50_35.bmp).
Откройте листинг файла 50_35.bmp в приложении Commander (TC, VC или WC) для просмотра (клавиша F3) в шестнадцатеричном (HEX) представлении.
Сопоставим картинку растрового изображения и HEX коды в листинге файла 50_35.bmp.
Коды с 19-го по 23-й (32 00 00 00) определяют размер растра (число пикселов) по горизонтали. Коды с 24-го по 27-й (23 00 00 00) определяют размер растра по вертикали. Чтобы убедиться в этом воспользуйтесь калькулятором. В рассматриваемом примере размер растра – 50 * 35. HEX коду 32 соответствует десятичное (DEC) число 50, HEX коду 23 – DEC число 35.
На размера растра отводится 4 байта (HEX кода). Одним байтом определяется размер от 0 до 255. При превышении 255 (код FF) будет задействован следующий байт. Например, DEC числу 256 соответствует HEX код 100. Размер растра 256 будет представлен в листинге файла (00 01 00 00).
Коды символов, начиная с 63-го и до конца файла, содержат последовательность данных о цвете точек растра – в порядке слева направо вдоль каждой ряда и снизу вверх по рядам. Один байт описывает 8 точек, белая точка в BIN коде описывается единицей, черная – нулем.
Сколько байт необходимо для описания 50 точек в одном ряду? Не менее 7 (7*8=56). Но используется 8 (8*8=64), соблюдается кратность 4 байтам (4*8=32). Обратите внимание в листинге файла на HEX коды в конце описания каждого ряда повторяются байты FF FF C0 00. Эти байты описывают последние 32 точки из 64-х. Из них 14 несуществующих точек (64-50=14) описаны нулями.
Точки какого ряда описаны кодом FC 1F? Отсчитываем ряды по (по 8 байт в каждом), можно также ориентироваться на код (C0 00) в конце каждого ряда. Получаем 11-й ряд. В нем находятся 5 точек. Проверяем результат с помощью калькулятора.
VLISP программа считывания данных из BMP-файла (монохромного)
Программа последовательно считывает из BMP-файла HEX-коды. По этим данным определяется порядковый номер каждой черной точки в ряду, начиная слева. Порядковые номера черных точек каждого ряда заносятся в список, который после окончании чтения ряда записывается в файл Result.txt.
Информация, записанная в файл Result.txt:
Описание программы
Из BMP-файла последовательно считываются байты с помощью функции read-char. Данные, которые будут использоваться в программе, запоминаются в переменных, остальные пропускаются.
Размер растра (xsize и ysize) определяется парой из 4-х байт. Как объединить эти 4 байта в одно число? Рассмотрим более простую задачу. Как из 4-х цифр «5» «8» «9» и «1» сформировать число 1985? Для этого каждую цифру сдвигаем влево на соответствующее количество разрядов (добавляем нули слева), а результат суммируем.
Аналогично решается задача формирования 4-х байтного числа. В пользовательской функции (r) из 4-х байтов сложением формируется одно число. Каждый байт перед сложением сдвигается на соответствующее количество разрядов (1, 2 и 3 байта). Сдвиг выполняется функцией Lsh, параметры сдвига указывается в битах (8, 16 и 24). Функция (r) возвращает число в 10-тичном представлении. Результат запоминается в переменных (xsize и ysize).
Далее считываются и обрабатываются точки, на предмет выявления их цвета. Используется внешний цикл по ysize и внутренний цикл по xsize.
Учитывая, что число байтов, которые описывают один ряд точек, кратно 4 объединим их по аналогии с предыдущей задачей. Только в этом случае из 4-х цифр «5» «8» «9» и «1» будем формировать число 5891:
Эту задачу в программе решает пользовательская функция (r). Она объединяет 4-х байта в 32 разрядное число, которое сохраняется в переменной n. В функции (r) также создается 32 разрядное число (сохраняется в переменной mask), первый бит которого – 1(единица), остальные – 0 (ноль). Начальное значение «маски» формируется путем побитового сдвига единицы влево на 31 разряд (lsh 1 31):
Отметим, что любое число независимо от его представления (HEX, DEC, BIN) остается одним и тем же. А функции обрабатывают его по-разному. Например, функция read-char работает с байтами, а Lsh с битами.
Тестирование каждой точки, которая описывается в переменной n, анализируется путем применения побитового умножения c значением переменной mask(if (= (logand n mask) 0) (setq lst (cons x lst))):
В верхнем примере проверялась крайняя 6-я точка сформированного числа, в нижнем примере – 19-я точка. Если результат побитового умножения ноль, то проверяемая точка – черная. Порядковый номер точки в ряду сохраняется в переменой x. Каждая черная точка заносится в начало списка (setq lst (cons x lst)). По окончании анализа ряда список записывается наоборот в файле результата result.txt (princ (reverse lst) fo).
Маска и число обновляются после 32 сдвигов (if (= mask 0) (m)), а также, в случае, если заканчивается внутренний цикл (repeat xsize…). При этом, лишние пиксели, которые находятся за пределами растра (64-50=14), автоматически отсекаются, поскольку в начале очередного цикла по Y (repeat ysize (m) …) значения переменных n и mask обновляются.
Формат BMP (24-bit Bitmap)
На рисунке приведен пример простого изображения (размер 34 *10 точек) из 3-х красных точек в левом нижнем углу, остальные точки белые.
Раскрываем листинг файла и, сопоставляя с изображением, определяем, как описываются данные в нем:
Файл начинается с символов “BM”, указывающих на формат файла.
С 19 позиции 4 байта (22 00 00 00) указывают размер файла по X (количество точек в строке 34), с 23-й позиции – 4 байта (0A 00 00 00) указывают размер файла по Y (количество рядов 10).
Начиная с 55-го байта и до конца файла содержатся данные о цвете точек растра – в порядке слева направо вдоль каждого ряда и снизу вверх по рядам. Одна точка описывается тремя байтами, каждый из которых представляет синюю (Blue), зеленую (Green) и красную (Red) составляющие цвета. В рассматриваемом примере первая точка (красного цвета) описана байтами (00 00 FF) вторая (белого цвета) – (FF FF FF).
Каждый ряд точек описывается количеством байт, кратным 4. Ряд из 34 точек должен описываться 34*3 + 2 =104 байтами. Два байта (00 00) добавляется в конце описания каждого ряда для обеспечения кратности 4. Если бы ряд состоял из 33 точек, то в конце каждого ряда добавилось по 1 байту для обеспечения кратности 4 (33*3 + 1 =100).
Загрузка и чтение BMP (24-bit Bitmap) на VB.NET
Ниже приводится модуль программы, который используется в приложении для идентификации продуктов (фруктов и овощей) на основе данных от видеокамеры. Модуль обеспечивает загрузку картинки и считывания точек (по 3 байта на каждую точку) из файла.
С++ программа считывания данных из BMP (24-bit Bitmap)
Ниже приводится модуль программы, который используется в приложении 3D-реконструкция по 2-м изображениям. Модуль обеспечивает загрузку данных из BMP файлов в динамически выделяемую оперативную память.
Формат Bmp (256-цветной)
За информационным заголовком следует таблица цветов, представляющая собой массив из 256 (по числу цветов) 4-байтовых полей. Каждое поле соответствует своему цвету в палитре, а три байта из четырех – компонентам синей, зеленой и красной составляющих для этого цвета. Последний, самый старший байт каждого поля зарезервирован и равен 0.
После таблицы цветов находятся данные изображения, которое по строкам растра записано снизу вверх, а внутри строки – слева направо. Так как на некоторых платформах невозможно считать единицу данных, которая меньше 4 байт, длина каждой строки выровнена на границу в 4 байта, т. е. при длине строки, некратной четырем, она дополняется нулями. Это обстоятельство обязательно надо учитывать при считывании файла.
На нижнем рисунке представлено точечное изображение (10*5) и конец листинга файла, где захвачены несколько полей из таблицы цветов и приводятся данные об изображении (обведены красной линией).
На рисунке выделены по 4 байта цветов палитры, которые используются для указания цвета точек. Белый цвет имеет последний номер в таблице цветов – 255 (FF). Синий цвет указан под номером 252 (FC), зеленый – 250 (FA), красный – 249 (F9). Длина каждой строки дополняется 2-я байтами (00 00) для кратности 4 (10+2=12).
ITGuides.ru
Вопросы и ответы в сфере it технологий и настройке ПК
Чем лучше открыть файл формата BMP для просмотра и редактирования
Файлы формата bmp обычно хранят растровые изображения. Этот формат не является сжатым и используется в Windows.
Более подробно о файлах BMP
Структура файла BMP состоит из четырех блоков
Данный формат графики называется «аппаратно независимый растр». Сам файл состоит таких частей: заголовка файла (здесь хранятся данные о ширине и высоте файла, цветовых характеристиках начальной точки, растровом идентификаторе), заголовка изображения (его может не быть), палитры (может не быть) и самой картинки.
Информация в растровых изображениях представлена в пикселях. При этом для каждого пикселя задано определенное положение и значение цвета. В файлах BMP может быть задана разная глубина цвета на один пиксель, что зависит от числа битов на пиксель (это указывается в заголовке файла). Кроме того файл bmp может содержать изображение в оттенках серого.
Чем просматривать файлы BMP
Большинство популярных программ-просмотрщиков графики без проблем смогут открыть и отобразить содержимое, хранящееся в файле BMP, поэтому проблем возникнуть не должно. Под ОС Windows можно воспользоваться встроенной утилитой «Средство просмотра фотографий Windows».
Помимо стандартных средств, открыть BMP в режиме просмотра поможет любая из следующих программ:
Какими программами открыть BMP для редактирования
Файл bmp в Windows можно открыть с помощью стандартного редактора графики. Однако подойдет почти любой графический редактор, среди них – много бесплатных. Наиболее популярны следующие:
Если на вашем ПК стоит Mac OS, то воспользуйтесь такими приложениями:
Под операционной системой Linux bmp также открывает приложение GIMP.
Как конвертировать BMP в другие форматы
С конвертацией BMP в иные популярные графические форматы проблем не будет ввиду его широкой поддержки графическими редакторами. Чтобы сохранить BMP файл в PNG или JPEG, достаточно открыть такой файл любым графическим редактором из списка выше, и воспользоваться функциями экспорта или сохранения («Сохранить как…»). В списке форматов, в который будет сохранено содержимое, выбрать нужный. Ну и, конечно, указать путь для сохранения.
Итак, формат bmp популярен, поэтому редакторов, которые его «понимают», просто множество. Стоит испробовать несколько программ, чтобы выбрать наилучшую для себя.
Отблагодари меня, поделись ссылкой с друзьями в социальных сетях:
Читайте также
Как открыть документы в формате DOC онлайн
Онлайн просмотр файлов с расширением DWG
Как открыть файлы CDR онлайн
Формат AVI
Как и чем открывать, создавать и редактировать файлы формата HTML
Файл формата VOB: какие программы для открытия использовать и как сжать
Для чего используются файлы FDB, как и какими программами их открыть?
Оставить комментарий ВКонтакте
3 Комментариев
Элементарными функциями редактирования файлов BMP обладает отличный, бесплатный просмотровщик FastStone Image Viewer. По сравнению с ним, Paint.NET гораздо более продвинут, а тем кому нужен мощный, надежный и бесплатный редактор графики, можно смело рекомендовать GIMP
Статья полезная. Из вышеперечисленных программ использую уже больше 3 лет ACD See, но платную версию. Она и фотошоп заменит, и как листалка картинок сойдёт. Её смело могу советовать.
Как создать файл bmp c прозрачным фоном
Marina_
Пользователь сайта
Guest
Guest
monter
Знаток
Marina_
Пользователь сайта
Guest
Guest
>Хотя бы просто скажите это возможно или нет
Нет. Формат bmp не поддерживает прозрачность.
Если бы ты была программистом, то тогда могла бы в своей программе назначить один из цветов прозрачным, но это уже из другой оперы.
Guest
Запрещено декретом ВКПб?
Guest
Кстати, т.к. вы сохраняете альфа-канал, то не забудьте полностью избавиться от частично прозрачных пикселов слоя, тогда в изображение не попадут пикселы фона после использования альфа-канала как информации о прозрачных пикселах фона.
Это можно сделать или с помощью плагина, или вручную.
Сначала загрузите селекцию с собственной прозрачности слоя и сохраните ее как альфа-канал. Снимите селекцию.
После этого заливаете фон серым цветом и Flatten Image. Теперь сохраняете в bmp 32 bit и готово.
Guest
Guest
А, читаем? А делать кто будет, Аниськин?
Или это все равно невожможно потому что в спецификации той реализации так написано. Да?
А вот товарищ Влад советует gif, так вот как раз gif и не поддерживает альфа-канала. Процитировать из спецификации?
Guest
Кому нужен твой альфа канал, который виден в PS?!
Ты вопрос и пояснение читал?
>Использовать файлы будут для работы с комплексом (на экране датчики-файлы bmp, которые в зависимости от ситуевины будут показывать, что пожар или нет).
Как она в сторонней программе сможет использовать этот альфа канал? Ее bmp файлы будут не прозрачны!
Guest
monter
Знаток
Игорь, а кто сказал что она в сторонней программе это будет делать? может у них это курсовой/дипломный проект и люди по неопытности выбрали bmp формат? Автор то молчит о задаче.
А если это готовая сторонняя программа и там используется этот bmp формат, тогда затаскиваем в PS эти родные рисунки м смотрим какой цвет использовали программеры под прозрачный. и стряпаем свои рисунки с учетом этого.
Для примера шахматы KChess Elite http://kniazeu.by.ru/chess/kchess.html
картинки все в bmp, однако на экране мы видим с прозрачностью.
так что всЕ зависит от задачи!
Guest
>(на экране датчики-файлы bmp, которые в зависимости от ситуевины будут показывать, что пожар или нет).
Вопрос задававшей представляется мне таким:
программа работает на компьютере и получает сигналы от внешних устройств. В зависимости от сигнала показывается та или иная картинка bmp на подложке. Других данных нет и нет данных как эти файлы будут добавляться в программу.
>тогда затаскиваем в PS эти родные рисунки м смотрим какой цвет использовали программеры под прозрачный. и стряпаем свои рисунки с учетом этого.
Марина пишет о том, что эти файлы она будет создавать сама.
При интеграции рисунка bmp в программу в момент ее разработки, в этом рисунке становиться прозрачным тот цвет, который находиться в крайнем левом нижнем пикселе. Таким образом убирается канва. Но Марина не пишет программу, ей надо предоставить разные готовые рисунки с прозрачностью в формате bmp и совсем не обязательно на однородном фоне в дальнейшем они будут находиться. Возможно, что они будут добовлятся в программу простым открытием файла через диалог. Ну и где тут будут прозрачность?
Guest
В том и дело что никакой информации о том ПО которое имел ввиду автор вы не имеете, хотя по описанию понятно что это нечто промышленное, но заранее решили что там люди тупее чем в Адобе, и никогда не смогут открыть файл bmp как бинарный массив данных известной структуры чтобы использовать информацию о цвете и прозрачности сохраненной как альфа-канал.
Или там роялти надо Адобе платить за это расширение?
Вот если бы они там psd-файлы хотели бы использовать, то, может быть им и потребовался ФШ. Хотя если скачать SDK там можно узнать все нужное об этом формате чтобы открывать его в *своей собственной* программе не хуже, чем он открывается в ФШ.
Или вы полагаете что написать такую программу невозможно?
Влад, это вас, ламера надо забанить чтобы вы тут не зловонили безответственно.
games maker Все о создании игр и не только
3 февраля 2010 в 21:12
Формат данных BMP (bitmap)
В сегодняшнем уроке мы рассмотрим первый на нашем пути файловый формат. Различные форматы файлов предназначены для хранения разной информации. Каждый формат задаёт способ организации данных в файле.
Информация о файле BMP (bmp file header)
У каждого файла bitmap есть заголовок из 14 байт. Поля этого заголовка:
Давайте создадим изображение 100×100 пикселей. Каждый пиксель занимает 32 бита. Файловый заголовок будет выглядеть вот так:
Важное замечание: на самом деле эти числа хранятся как последовательность байтов. Надеюсь, это понятно. Здесь (и в следующем примере) я расположил их в столбик для удобства восприятия.
Последнее поле: непосредственно изображение начинается сразу после файлового заголовка (14 байт) и заголовка изображения (40 байт).
Информация об изображении BMP (заголовок изображения)
Существует несколько версий BMP. Определить версию можно по размеру заголовка изображения. Мы будем пользоваться версией Windows V3, которая занимает 40 байт. Другие версии занимают 12, 64, 108, 124 байта.
В WinAPI для хранения bmp версии Windows V3 используется структура BITMAPINFOHEADER.
Поля заголовка Windows V3:
Теперь посмотрим как будет выглядить заголовок изображения в нашем случае:
После заголовков расположена палитра цветов. Если её нету, то после заголовков сразу начинается изображение. Изображения с палитрами мы пока рассматривать не будем.
Данные изображения BMP
Изображение состоит из пикселей. Формат пикселей задаётся глубиной цвета (смотрите выше). В нашем примере мы использовали 32 бита на пиксель. 32-ух битный цвет обычно состоит из четырёх каналов: альфа (прозрачность), красный, зелёный, синий: ARGB (Alpha, Red, Green, Blue). Иногда альфа-канал не используется, в этом случае изображение всё равно может занимать 32 бита, просто при вычислениях не обращают внимания на значения одного канала. В этом случае названия каналов записываются так: XRGB.
Каждый канал занимает 8 бит (1 байт) и может принимать 256 значений: от нуля до 255 (от 0x00 до 0xff).
В bmp изображение хранится построчно снизу вверх, т.е. первыми записываются нижние строки, затем верхние. Удостоверьтесь в этом: загрузите одно из изображений из первого упражнения и сохраните только половину строк этого изображения в другой файл.
При 32-ухбитной глубине цвета каналы в bmp записываются так: BGRA. Именно в таком порядке: синий, зелёный, красный, альфа.
Размер строки данных в изображении bmp должнен быть кратен четырём (в байтах). Если это не так, то строка дополняется нулями. Это происходит если используется 1,2,4,8,16,24 бита на канал. Например, у нас есть изображение шириной в 3 пикселя и мы используем 16-битный цвет. Ширина строки: 16*3 = 48 (6 байт). Но длина строки должна быть кратной четырём, поэтому добавляются ещё два байта и длина строки в данном примере будет равна восьми байтам. Хотя в последних двух байтах каждой строки и не будет хранится полезной информации. Нужно учитывать условие кратности размера строки четырём при работе с не 32-ух битными изображениями.
Теперь продолжним с нашим примером и с помощью кода создадим изображение. Каждый пиксель будет инициализироваться случайным цветом: