Я использую 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 цвет кажется неправильным:
Цвет кажется слишком светлым.Возможно, проблема в том, что теперь png - это 16-битный / цветной RGBA вместо 8-битного / цветной RGB
Мои вопросы: как мне изменить существующий код, чтобы перейти с 16-битного на 8-битный