Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   decode BMP - как вытащить из массива 32 битный цвет (http://www.flasher.ru/forum/showthread.php?t=148710)

VitaliyKrivtsov 09.01.2011 03:23

decode BMP - как вытащить из массива 32 битный цвет
 
Здравствуйте! У меня назрел вопрос по поводу распаковывания массива байт файла BMP в BitmapData.
Почитал инфу о формате, в википедии хорошо расписана структура файла. Если я правильно понял BMP несжатые в которых глубина 32 бита - синий, зеленый, красный, альфа - занимают 4 байта. А вот собственно вопрос, как оптимально используя ресурсы, с читать данные отдельно для каждого канала, что бы перенести потом в BitmapData при помощи setPixel( ) ?

Wolsh 09.01.2011 03:50

А зачем Вам отдельные каналы? Читайте 32 битный уинт ( ByteArray#readUnsignedInt() ) и пишите его в битмапдату.
Если честно, ни разу не встречал .bmp с 32 битами без сжатия. Разве что в иконках.

Obi 09.01.2011 03:50

Эм, непонятно, а чем Loader.load() не подходит? Он вам загрузит картинку, потом вы возьмете оттуда битмапдату и попиксельно ее распотрошите. r: color >> 16 & 0xFF, g: color >> 8 & 0xFF, b: color & 0xFF.

Wolsh 09.01.2011 04:16

Obi, Loader не понимает BMP. И товарищу не надо никого потрошить, ему надо BitmapData.

TERRORist 09.01.2011 14:45

будет очень медленно работать, если попиксельно и большие картинки. Если есть возможность, юзайте PNG с альфа каналом. Каналы после отрисовки ега в битмапдату разделяются методом CopyChannel

VitaliyKrivtsov 09.01.2011 18:44

Wolsh, такие .bmp с 32 битами на пиксель есть, они не сжимаются по умолчанию, так было разработчиками этого формата задумано, сжимаются те .bmp которые ниже 24 бит на пиксель.
TERRORist, мне нужно BitmapData то есть само изображение, я имел ввиду, что разобрать по каналу - значить выделить каждый канал из массива байт (красный, зеленый, синий ) и впихнуть в BitmapData, не на оборот.

Wolsh 09.01.2011 19:54

Цитата:

сжимаются те .bmp которые ниже 24 бит на пиксель.
Ниже 24 бит - это 8 бит, то есть 256 цветов, индексированное изображение. Никто его не сжимает, нет смысла. Смысл сжимать есть как раз для 32 бит, так как вес уже ощутимый.
Я разбирал bmp, когда делал "читалку" файла ICO. Там действительно не сжимается 32 бита для маленьких размеров. Но, например, "vista icon" содержит бмп-файл с PNG сжатием (в спецификации BMP возможен также и JPG, но в иконках он бессмысленен). Спецификация также предусматривает изображение с 16 бит на пиксель - я не смог найти или создать в редакторах ни одного примера такого изображения, они может и были в эпоху виндос 3, а может и в миллениуме)) Вобщем мой класс читает все, но только не 16 бит. Если хотите - поделюсь (впрочем бмп-читалки можно найти в разных библиотеках). Что касается 32-бит бмп, то там действительно все просто, блок имеджДата и есть битмапдата (единственно он может быть зеркально перевернут по вертикали), 32-битный паддинг строк развертки делать не надо, данные итак 32 бита, то есть просто читаем их подряд и задаем битмапдате setPixel32() в двойном цикле ширина/высота.

VitaliyKrivtsov 09.01.2011 20:54

Поюзал гугл , нашол класс который разбирает все возможные .bmp, но нет класса который запихивал бы в массив байт, что б потом, например, сохранить изображение у себя на компу, не найду и хорошей документации, Wolsh может посоветуешь ту документацию по которой сам разбирал bmp.

Wolsh 09.01.2011 21:16

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

Цитата:

нет класса который запихивал бы в массив байт
- в смысле создавал файл BMP из имеющейся битмапдаты, то есть BMP Encoder?

VitaliyKrivtsov 09.01.2011 21:23

да, такой себе класс BMPEncoder, конечно его сложнее будет написать чем класс Decoder который только разбирает.


Часовой пояс GMT +4, время: 23:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.