Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.01.2008, 16:31
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 1  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
По умолчанию работа с BitmapData неточные данные

Записываю BitmapData
Код:
imgbit.setPixels(rect,c);
trace(c[0],c[1],c[2],c[3]);//6 148 59 175
И тут же считываю
Код:
var imgbar1:ByteArray = imgbit.getPixels(rect);
trace(imgbar1[0],imgbar1[1],imgbar1[2],imgbar1[3]);//6 127 42 170
Почему байт массив изменился?
__________________
Пора бы мне уже умнеть..

Старый 03.01.2008, 17:14
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 2  
Ответить с цитированием
aQuestion
Banned
[+5 08.09.07]
[+4 17.01.08]
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
пытаясь воспроизвести вышеописанную ситуацию, получил ещё эффект:
Код:
var c = new ByteArray();
c.length = 8;
c.writeByte (6);
c.writeByte (148);
c.writeByte (59);
c.writeByte (175);
trace(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7]);

imgbit.setPixels(rect,c);
c.writeByte (1);
c.writeByte (2);
c.writeByte (3);
c.writeByte (4);
trace(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7]);
output:
Цитата:
6 148 59 175 0 0 0 0
6 148 59 175 0 0 0 0
собственно, по вопросу: у вас альфа = 6, следовательно вместо 148 сохранится 6 * 148 / 255 = 3, а прочитается 3 * 255 / 6 = 127. аналогично 6 * 59 / 255 = 1, 1 * 255 / 6 = 42, и то же самое для 175. это слегка подзабытые мной грабли.


Последний раз редактировалось aQuestion; 03.01.2008 в 17:28.
Старый 03.01.2008, 17:30
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Потому что напрямую так с массивом не работают.

Ничего никуда не изменяется:
Код:
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.utils.ByteArray;
var bmp:BitmapData = new BitmapData(2,2,true,0);
var ba:ByteArray = new ByteArray();
ba.writeUnsignedInt(0xFFFFFFFF);
ba.writeUnsignedInt(0xFFFF0000);
ba.writeUnsignedInt(0xFF00FF00);
ba.writeUnsignedInt(0xFF0000FF);
ba.position = 0;
bmp.setPixels(bmp.rect, ba); // write
ba = bmp.getPixels(bmp.rect); // read
ba.position = 0;
while(ba.bytesAvailable) {
	trace('pixel color:','0x'+ba.readUnsignedInt().toString(16).toUpperCase());
}
addChild(new Bitmap(bmp));

Старый 03.01.2008, 17:34
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 4  
Ответить с цитированием
aQuestion
Banned
[+5 08.09.07]
[+4 17.01.08]
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
етц, а если писать ba.writeUnsignedInt(0x01345678); ?

Старый 03.01.2008, 18:03
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Я думаю, некий смысл вытекает из этого:

Цитата:
Сообщение от Help
All pixels in a BitmapData object are stored as premultiplied color values. A premultiplied image pixel has the red, green, and blue color channel values already multiplied by the alpha data. For example, if the alpha value is 0, the values for the RGB channels are also 0, independent of their unmultiplied values. This loss of data can cause some problems when you perform operations. All BitmapData methods take and return unmultiplied values. The internal pixel representation is converted from premultiplied to unmultiplied before it is returned as a value. During a set operation, the pixel value is premultiplied before the raw image pixel is set.

Старый 03.01.2008, 19:01
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 6  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
premultiplied и unmultiplied это что за пиксели?

aQuestion
А выход-то какой, не злоупотреблять альфой?
__________________
Пора бы мне уже умнеть..


Последний раз редактировалось Ноябрь; 03.01.2008 в 19:15.
Старый 03.01.2008, 19:46
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 7  
Ответить с цитированием
aQuestion
Banned
[+5 08.09.07]
[+4 17.01.08]
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
премультиплайед = предварительно умноженный (на альфу от 0 до 1)
анмультиплайед = не умноженный (или же разумноженный обратно)

в силу целочисленности конверсия из премультиплайед в анмультиплайед, очевидно, идёт с потерями.

выход - смотря из какой ситуации. в том топике, например, я пытался использвать альфу для хранения ч/б картинки, и мой выход, т.о., свёлся к использованию отдельного файла.

Старый 03.01.2008, 20:25
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 8  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
т.е избежал ситуации, когда необходимо получить данные из BitmapData?
__________________
Пора бы мне уже умнеть..

Старый 03.01.2008, 21:21
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 9  
Ответить с цитированием
aQuestion
Banned
[+5 08.09.07]
[+4 17.01.08]
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
не, у меня просто была цветная картинка (карта) и ч/б (маска воды). я подумал что неплохо бы сэкономить, и запихнуть всё в один пнг. оказалось, что плохо.

подумай, никак ли нельзя тебе хранить альфу отдельно от остальных каналов.

Старый 03.01.2008, 21:48
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 10  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
хз.. как из пнг можно выделить альфа канал?

а я кодирую байт массив, просто хотел эмитировать загрузку данных (каждый раз получать массив из битмапа).
сейчас у меня массив из битмапа загружается только один раз, после этого уже битмап строится на основе байт массива..
__________________
Пора бы мне уже умнеть..

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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