我刚刚开始探索开罗,但是现在我真的想把它用于非常简单的事情。
我有一个非常低技术的位图,即3 * X * Y数字数组。我想使用Cairo将其转换为位图并写入文件。我正在浏览教程,而且我没有看到将它用于比较低级别的功能的方法。
我不会认为一旦我知道该工具是什么,我需要有关如何使用该工具的指导。
答案 0 :(得分:2)
我实际上没有对此进行测试,但以下内容应该会给你很多有用的提示:
#include <cairo.h>
#include <stdint.h>
#define WIDTH 42
#define HEIGHT 42
uint8_t data[WIDTH][HEIGHT][3];
cairo_surface_t* convert()
{
cairo_surface_t *result;
unsigned char *current_row;
int stride;
result = cairo_image_surface_create(CAIRO_FORMAT_RGB24, WIDTH, HEIGHT);
if (cairo_surface_status(result) != CAIRO_STATUS_SUCCESS)
return result;
cairo_surface_flush(result);
current_row = cairo_image_surface_get_data(result);
stride = cairo_image_surface_get_stride(result);
for (int y = 0; y < HEIGHT; y++) {
uint32_t *row = (void *) current_row;
for (int x = 0; x < WIDTH; x++) {
uint32_t r = data[x][y][0];
uint32_t g = data[x][y][1];
uint32_t b = data[x][y][2];
row[x] = (r << 16) | (g << 8) | b;
}
current_row += stride;
}
cairo_surface_mark_dirty(result);
return result;
}