![]() |
decode BMP - как вытащить из массива 32 битный цвет
Здравствуйте! У меня назрел вопрос по поводу распаковывания массива байт файла BMP в BitmapData.
Почитал инфу о формате, в википедии хорошо расписана структура файла. Если я правильно понял BMP несжатые в которых глубина 32 бита - синий, зеленый, красный, альфа - занимают 4 байта. А вот собственно вопрос, как оптимально используя ресурсы, с читать данные отдельно для каждого канала, что бы перенести потом в BitmapData при помощи setPixel( ) ? |
А зачем Вам отдельные каналы? Читайте 32 битный уинт ( ByteArray#readUnsignedInt() ) и пишите его в битмапдату.
Если честно, ни разу не встречал .bmp с 32 битами без сжатия. Разве что в иконках. |
Эм, непонятно, а чем Loader.load() не подходит? Он вам загрузит картинку, потом вы возьмете оттуда битмапдату и попиксельно ее распотрошите. r: color >> 16 & 0xFF, g: color >> 8 & 0xFF, b: color & 0xFF.
|
Obi, Loader не понимает BMP. И товарищу не надо никого потрошить, ему надо BitmapData.
|
будет очень медленно работать, если попиксельно и большие картинки. Если есть возможность, юзайте PNG с альфа каналом. Каналы после отрисовки ега в битмапдату разделяются методом CopyChannel
|
Wolsh, такие .bmp с 32 битами на пиксель есть, они не сжимаются по умолчанию, так было разработчиками этого формата задумано, сжимаются те .bmp которые ниже 24 бит на пиксель.
TERRORist, мне нужно BitmapData то есть само изображение, я имел ввиду, что разобрать по каналу - значить выделить каждый канал из массива байт (красный, зеленый, синий ) и впихнуть в BitmapData, не на оборот. |
Цитата:
Я разбирал bmp, когда делал "читалку" файла ICO. Там действительно не сжимается 32 бита для маленьких размеров. Но, например, "vista icon" содержит бмп-файл с PNG сжатием (в спецификации BMP возможен также и JPG, но в иконках он бессмысленен). Спецификация также предусматривает изображение с 16 бит на пиксель - я не смог найти или создать в редакторах ни одного примера такого изображения, они может и были в эпоху виндос 3, а может и в миллениуме)) Вобщем мой класс читает все, но только не 16 бит. Если хотите - поделюсь (впрочем бмп-читалки можно найти в разных библиотеках). Что касается 32-бит бмп, то там действительно все просто, блок имеджДата и есть битмапдата (единственно он может быть зеркально перевернут по вертикали), 32-битный паддинг строк развертки делать не надо, данные итак 32 бита, то есть просто читаем их подряд и задаем битмапдате setPixel32() в двойном цикле ширина/высота. |
Поюзал гугл , нашол класс который разбирает все возможные .bmp, но нет класса который запихивал бы в массив байт, что б потом, например, сохранить изображение у себя на компу, не найду и хорошей документации, Wolsh может посоветуешь ту документацию по которой сам разбирал bmp.
|
http://pascal.sources.ru/articles/099.htm
MSDN: http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx AS3 BMPDecoder : http://ntt.cc/2008/10/01/using-bmpde...n-support.html Цитата:
|
да, такой себе класс BMPEncoder, конечно его сложнее будет написать чем класс Decoder который только разбирает.
|
| Часовой пояс GMT +4, время: 23:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.