我正在使用 c 代码从 gif 文件中获取,并且使用libraryframe
可以正常工作,然后我使用这种方法将返回的图像从这种格式格式转换。ffmpeg
av_read_frame
BGRA to ARGB
libyuv::ABGRToARGB
在 java 部分我收到了bitmap
,当我把它放在ImageView
画成白色的透明像素中时。
Bitmap bitmap= Bitmap.createBitmap(150, 150, Bitmap.Config.ARGB_8888);
getGifFrame(gifFile,bitmap); //native method which get image frame from gif file.
imageTest.setImageBitmap(backgroundBitmap);//this bitmap in debug mode I can see that it has transparent pixels, but in drawn it appears white!
即使我循环返回bitmap pixels
并检查每个像素,我也发现它们是透明的!
for (int x = 0; x < b.getWidth(); x++)
{
for (int y = 0; y < b.getHeight(); y++)
{
int color = b.getPixel(x, y);
if (color == Color.WHITE)//This condition never occurred
{
b.setPixel(x, y, Color.TRANSPARENT);
}
}
}
什么也没发生,它仍然是白色的。然后我确实将所有透明像素转换为透明的!猜猜看,它正在工作!
else if (color == Color.TRANSPARENT)
{
b.setPixel(x, y, Color.TRANSPARENT);
}
我不明白为什么会这样。任何帮助,将不胜感激。
编辑1: 我从位图中获取所有像素并再次设置它们而不做任何事情,它也有效!?
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
bitmap.setPixels(pixels, 0, width, 0, 0, width,height);