我正在使用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位?