|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
decode BMP - как вытащить из массива 32 битный цвет
Здравствуйте! У меня назрел вопрос по поводу распаковывания массива байт файла BMP в BitmapData.
Почитал инфу о формате, в википедии хорошо расписана структура файла. Если я правильно понял BMP несжатые в которых глубина 32 бита - синий, зеленый, красный, альфа - занимают 4 байта. А вот собственно вопрос, как оптимально используя ресурсы, с читать данные отдельно для каждого канала, что бы перенести потом в BitmapData при помощи setPixel( ) ? Последний раз редактировалось VitaliyKrivtsov; 09.01.2011 в 03:26. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А зачем Вам отдельные каналы? Читайте 32 битный уинт ( ByteArray#readUnsignedInt() ) и пишите его в битмапдату.
Если честно, ни разу не встречал .bmp с 32 битами без сжатия. Разве что в иконках.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Эм, непонятно, а чем Loader.load() не подходит? Он вам загрузит картинку, потом вы возьмете оттуда битмапдату и попиксельно ее распотрошите. r: color >> 16 & 0xFF, g: color >> 8 & 0xFF, b: color & 0xFF.
__________________
#flasher@irc.trg.ru:6667 Последний раз редактировалось Obi; 09.01.2011 в 03:55. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Obi, Loader не понимает BMP. И товарищу не надо никого потрошить, ему надо BitmapData.
__________________
Reality.getBounds(this); |
|
|||||
Wolsh, такие .bmp с 32 битами на пиксель есть, они не сжимаются по умолчанию, так было разработчиками этого формата задумано, сжимаются те .bmp которые ниже 24 бит на пиксель.
TERRORist, мне нужно BitmapData то есть само изображение, я имел ввиду, что разобрать по каналу - значить выделить каждый канал из массива байт (красный, зеленый, синий ) и впихнуть в BitmapData, не на оборот. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Я разбирал bmp, когда делал "читалку" файла ICO. Там действительно не сжимается 32 бита для маленьких размеров. Но, например, "vista icon" содержит бмп-файл с PNG сжатием (в спецификации BMP возможен также и JPG, но в иконках он бессмысленен). Спецификация также предусматривает изображение с 16 бит на пиксель - я не смог найти или создать в редакторах ни одного примера такого изображения, они может и были в эпоху виндос 3, а может и в миллениуме)) Вобщем мой класс читает все, но только не 16 бит. Если хотите - поделюсь (впрочем бмп-читалки можно найти в разных библиотеках). Что касается 32-бит бмп, то там действительно все просто, блок имеджДата и есть битмапдата (единственно он может быть зеркально перевернут по вертикали), 32-битный паддинг строк развертки делать не надо, данные итак 32 бита, то есть просто читаем их подряд и задаем битмапдате setPixel32() в двойном цикле ширина/высота.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 09.01.2011 в 19:57. |
|
|||||
Поюзал гугл , нашол класс который разбирает все возможные .bmp, но нет класса который запихивал бы в массив байт, что б потом, например, сохранить изображение у себя на компу, не найду и хорошей документации, Wolsh может посоветуешь ту документацию по которой сам разбирал bmp.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
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 Цитата:
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 09:15. |
|
« Предыдущая тема | Следующая тема » |
|
|