libpng读取PNG8和PNG24的区别
2014-08-08 11:44
399 查看
PNG8和PNG24最大的不同就在于透明度,PNG8只有一位存储透明度,PNG24有8位。这也就影响了PNG数据块的数据格式大小。在libpng中提供了检测设置的方法。
这个检测来自于libpng官方教程,检测透明度如果不够,那么会补齐数据格式。另外libpng还提供了额外的一些检测和设置。
所有的设置,都必须在png_read_update_info函数调用之前,才能起作用。
最后,关于png的一些信息获取,png_get_IHDR是针对32位图片的,那么16位图片就会有问题。我们需要用别的方法调用确保正确性。
// expand any tRNS chunk data into a full alpha channel if (png_get_valid(pngPtr, infoPtr, PNG_INFO_tRNS)) { png_set_tRNS_to_alpha(pngPtr); LOGD("png_set_tRNS_to_alpha"); }
这个检测来自于libpng官方教程,检测透明度如果不够,那么会补齐数据格式。另外libpng还提供了额外的一些检测和设置。
// force palette images to be expanded to 24-bit RGB
// it may include alpha channel
if (colorType == PNG_COLOR_TYPE_PALETTE) {
png_set_palette_to_rgb(pngPtr);
LOGD("png_set_palette_to_rgb");
}
// low-bit-depth grayscale images are to be expanded to 8 bits
if (colorType == PNG_COLOR_TYPE_GRAY && bitDepth < 8) {
png_set_expand_gray_1_2_4_to_8(pngPtr);
LOGD("png_set_expand_gray_1_2_4_to_8");
}
// expand any tRNS chunk data into a full alpha channel if (png_get_valid(pngPtr, infoPtr, PNG_INFO_tRNS)) { png_set_tRNS_to_alpha(pngPtr); LOGD("png_set_tRNS_to_alpha"); }
// reduce images with 16-bit samples to 8 bits
if (bitDepth == 16) {
png_set_strip_16(pngPtr);
}
// expand grayscale images to RGB
if (colorType == PNG_COLOR_TYPE_GRAY || colorType == PNG_COLOR_TYPE_GRAY_ALPHA) {
png_set_gray_to_rgb(pngPtr);
LOGD("png_set_gray_to_rgb");
}
所有的设置,都必须在png_read_update_info函数调用之前,才能起作用。
最后,关于png的一些信息获取,png_get_IHDR是针对32位图片的,那么16位图片就会有问题。我们需要用别的方法调用确保正确性。
/* Note that png_get_IHDR() returns 32-bit data into * the application's width and height variables. * This is an unsafe situation if these are 16-bit * variables */ width = png_get_image_width(pngPtr, infoPtr); height = png_get_image_height(pngPtr, infoPtr); bitDepth = png_get_bit_depth(pngPtr, infoPtr); colorType = png_get_color_type(pngPtr, infoPtr);
相关文章推荐
- PNG8和PNG24的区别
- [转]PNG8和PNG24的区别
- PNG8和PNG24的区别
- PNG8和PNG24的区别
- 关于PNG8和PNG24的区别
- PNG8和PNG24的区别
- png8和png24格式的使用和png8和png24的区别介绍
- PNG8和PNG24的区别
- PNG8和PNG24的区别
- png8和png24的区别
- png8和png24的区别
- png8和png24的根本区别
- 前端切图之png8和png24的区别
- ps切图:png8和png24的区别
- PNG8和PNG24的区别
- 关于cache文件格式的选择:png8,png24,png32 or jpeg
- 关于PNG透明,IE6,PNG8,PNG24,PNG32
- png-8 和 png-24的区别
- bak 9.NDK 下面 编译 libpng.已经如何在opengl es 里面读取png图片.
- png图片的简单介绍, 使用libpng读取内容,用于纹理贴图