libpng png_image_begin_read_from_memory 16-битный цвет (скриншот iPhone) - PullRequest
0 голосов
/ 12 марта 2019

Я использую 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-битный

...