gpt4 book ai didi

c++ - 是否可以将 Windows 位图绘制到 cairo 表面?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:29:06 30 4
gpt4 key购买 nike

我在一个项目中工作,在这个项目中,Cairo 被选为 OpenSUSE Linux 环境中的图形库(在 Xlib 上运行)。我在使用图形库或图形文件格式方面经验很少,我想知道是否可以将 Windows 位图图像绘制到 Cairo 表面?在开罗绘制 png 似乎相对简单,但我一直在到处寻找有关绘制位图的信息,但找不到任何东西。我拼凑了以下代码:

int height = 256;
int width = 256;
cairo_format_t format = CAIRO_FORMAT_RGB24;
int stride = cairo_format_stride_for_width (format, width);
unsigned char *bitmapData;
bitmapData = (unsigned char *)(malloc (stride * height));
std::ifstream myFile ("exampleBitmapImage.bmp", std::ios::in | std::ios::binary);
myFile.read ((char *)bitmapData, stride * height);

cairo_surface_t *imageSurface = cairo_image_surface_create_for_data (bitmapData, format, width, height, stride);
cairo_set_source_surface (cs, imageSurface, 0, 0);
cairo_paint (cs);
cairo_show_page (cs);
cairo_surface_destroy (imageSurface);

myFile.close();

奇怪的是,当我运行它时,它连续 8 次以其大小的 1/64 上下颠倒和倒转显示图像,然后填充图像大小的剩余部分(剩余的 7/8图像)与黑色。我怀疑它与文件格式有关,我正在错误地解析和提供二​​进制数据,并且对 Cairo 的设置不正确。谁能就如何使其正常工作提供指导?对于我的知识不足,我深表歉意,希望能更好地理解这个问题,非常感谢任何帮助,谢谢! :)

最佳答案

用 -1 乘以应该翻转位图的步幅。查找 BMP 文件格式 http://en.wikipedia.org/wiki/BMP_file_format和实现位图头解析器并正确设置编码。

现在猜测编码为 RGB24,您让 Cairo 将位图 header 解释为图像数据。

关于c++ - 是否可以将 Windows 位图绘制到 cairo 表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14738245/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com