Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   PNGEncoder проблема с альфой (http://www.flasher.ru/forum/showthread.php?t=206486)

toFL 06.02.2014 20:03

PNGEncoder проблема с альфой
 
Lib:
mx.graphics.codec.PNGEncoder

Есть задача поместить значение цвета A+RGB с нулевой альфой (Например: 0,127,127,127).
Но он, видимо для оптимизации веса, игнорирует такую запись и ставит все по нулям (0x0).
Может у кого есть мысли как это обойти?

P.S. Нашел PNGEncoder2 на HAXE с исходниками - работает так же. Но найти там это условие и поменять его, не тривиальная задача. К тому же Photoshop такие PNG с легкостью сохраняет.

illuzor 06.02.2014 21:16

Попробуйте BitmapData.encode()
Автоматически берёт альфу из битмапдаты.

toFL 06.02.2014 22:40

Цитата:

Попробуйте BitmapData.encode()
Пробовал, не катит. Судя по размеру файлов это одно и тоже.

silin 06.02.2014 23:31

Код AS3:

var bmd:BitmapData = new BitmapData(1, 1, true, 0x00808080);
var p:uint = bmd.getPixel32(0, 0);
trace( "p : " + p ); //0

беда не в кодировщике, а в самом BitmapData, любой енкодер получит этот ноль на входе
т.е. обойти можно только какими-то внутренними 'договоренностями', типа ставить не ноль, а 0x01, ну и как-то учитывать при дальнейших манипуляциях
к слову, а для чего именно такой png ( 0,127,127,127) может сгодится ?

Wolsh 07.02.2014 00:40

водяной знак)))

toFL 07.02.2014 01:31

Цитата:

а для чего именно такой png ( 0,127,127,127) может сгодится ?
Есть одна тайна как улучшить качество PVRTC 4bpp текстур. Если залить все пустые места RGBA (0,127,127,127), то артефактов на резких границах почти не будет. Выгода впечатляющая. Атласы генерирую из AS3.

Wolsh 07.02.2014 03:05

Если лень разбираться с алгоритмом енкодера, можно просто сделать постобработку, пробежаться по нужному чанку и заменить все ноли на нужное число.
И плевать на битмапдату)
Вопрос только в том, что будет после загрузки файла обратно. Из "правильного" пинга будет создана неправильная битмапдата?

toFL 07.02.2014 12:23

Цитата:

Вопрос только в том, что будет после загрузки файла обратно
Ну мне благо не нужно эту PNG обратно грузить, она только для последующего переведение в PVR -> ATF.

Найдено решение, пришлось обработать ByteArray с пикселями:
Код AS3:

var pvrColor:uint = combineARGB(0, 127, 127, 127);
var ba:ByteArray = source.getPixels(source.rect);
ba.position = 0;
while (ba.bytesAvailable)
{
        if (!ba.readUnsignedInt())
        {
                ba.position -= 4;
                ba.writeUnsignedInt(pvrColor);
        }
}

P.S. Это конечно гадство, что BitmapData съедает данные :(


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

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