【发布时间】:2021-06-18 05:00:36
【问题描述】:
我在使用 Cairo 在 linux 系统中绘制图像时遇到问题。如果使用 cairo_image_surface_create 方法,输出图像颜色与原始图像不相似。如下代码:
int width, height, channels;
unsigned char* data = stbi_load(imagePath.c_str(), &width, &height, &channels, STBI_rgb_alpha);
this->imageSource = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
unsigned char * surface_data = cairo_image_surface_get_data(this->imageSource);
memcpy(surface_data, data, width * height * 4 * sizeof(unsigned char));
cairo_surface_mark_dirty(this->imageSource);
free(data);
但使用 cairo_image_surface_create_from_png 时颜色会相同(此 api 仅支持 png 格式)。看我的代码如下:
this->imageSource = cairo_image_surface_create_from_png(imagePath.c_str());
还可以清楚地查看附加图像。
【问题讨论】:
-
您确定频道按预期顺序存储吗?参见例如en.m.wikipedia.org/wiki/RGBA_color_model#Representation
-
嗨,关于图像通道,我正在使用 stb_image 从结构为 32 位 (RGBA) 的文件中读取图像,但我也重新排序为 ARGB32,我得到的图像仍然与原始图像不同。
-
请注意,原始图像是PNG,位深度=24(RGB)。在这种情况下,我把 alpha 值默认为 255