Как установить альфа-флаг в фрагменте VP8X веб-изображения с прозрачностью
Я работаю над декодером кодировщика для анимированного изображения webp, используя чистую java. Мне нужно написать статическое изображение webp из каждого анимированного изображения webp. Он отлично работает, но для изображения с прозрачностью в изображении. читатель получает флаги для анимации и альфы, но когда я пишу флаг для альфы (не устанавливая анимацию как создание статического изображения данного кадра). Но, что удивительно, он вообще не устанавливает флаг. Я пробовал разные индексы, но не работал. Выходное изображение имеет белый фон, а прозрачный bg.
код:
public byte[] encodeWebPFrame(Frame frame, WebpImage webpImage) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(riff); // 4
baos.write(intToByteArray(getFileSize(frame))); // 4
baos.write(webp); // 4
baos.write(vp8x); // 4
baos.write(intToByteArray(10)); // 4
BitSet bs = new BitSet(32);
bs.set(1, false); // A hasAnim
bs.set(2, false); // X hasXmp
bs.set(3, false); // E hasExif
bs.set(4, true); // L hasalpha
bs.set(5, false); // I hasIccp
baos.write(bitSetToBytes(bs,4)); // 4
baos.write(intTo3ByteArray(frame.width)); // 3
baos.write(intTo3ByteArray(frame.height)); // 3
// alpha data, bitStream
if(frame.hasVP8chunk) {
if(frame.hasALPHchunk) {
baos.write(alph); // 4
baos.write(intToByteArray(frame.alphaData.length)); // 4
baos.write(frame.alphaData); // frame.alphaData.length
}
baos.write(vp8); // 4
baos.write(intToByteArray(frame.bitStream.length)); // 4
baos.write(frame.bitStream); // frame.bitStream.length
}else{
// Logs.i(this,"write byte[] -> VP8L "+frame.bitStream.length+" | baso - "+baos.size());
baos.write(vp8l); // 4
baos.write(intToByteArray(frame.bitStream.length)); // 4
baos.write(frame.bitStream); // frame.bitStream.length
}
baos.close();
return baos.toByteArray();
}