开罗:画一个像素阵列

时间:2017-03-30 20:34:42

标签: cairo

我刚刚开始探索开罗,但是现在我真的想把它用于非常简单的事情。

我有一个非常低技术的位图,即3 * X * Y数字数组。我想使用Cairo将其转换为位图并写入文件。我正在浏览教程,而且我没有看到将它用于比较低级别的功能的方法。

我不会认为一旦我知道该工具是什么,我需要有关如何使用该工具的指导。

1 个答案:

答案 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;
}