libpng png_image_begin_read_from_memory 16位颜色(iPhone屏幕快照)

时间:2019-03-12 13:36:58

标签: png libpng

我正在使用screenshotr_take_screenshot拍摄iPhone Xr设备的屏幕截图。

其中的数据将传递给libpng:

static int extract_png(png_bytep png, png_size_t png_size,
                   png_uint_32 *width, png_uint_32 *height,
                   png_bytep *raw, png_size_t *raw_size) {

png_image image;
memset(&image, 0, sizeof(image));
image.version = PNG_IMAGE_VERSION;
if (png_image_begin_read_from_memory(&image, png, png_size)) {
    image.format = PNG_FORMAT_RGBA;
    *raw_size = PNG_IMAGE_SIZE(image);
    *raw = malloc(*raw_size);
    int stride = PNG_IMAGE_ROW_STRIDE(image);
    if (*raw != NULL &&
        png_image_finish_read(&image, NULL, *raw, stride, NULL)) {
        *width = image.width;
        *height = image.height;
        png_image_free(&image);
     }

这在iPhone 6s设备上运行正常,但在iPhone Xr上,颜色似乎不正确:

enter image description here

颜色似乎太浅。也许问题在于png现在是16位/彩色RGBA而不是8位/彩色RGB

我的问题是:如何将现有代码从16位更改为8位?

0 个答案:

没有答案