Для тех, кому нужен ответ на этот вопрос (если вы существуете), я понял это:
Керрек на самом деле получает большую часть кредита здесь, но я думал, что опубликую свои результаты, и что в итоге сработало. Вот функция записи:
Cairo::ErrorStatus write_stdout(const unsigned char* data, unsigned int length)
{
return std::cout.write((char*)data,length)?CAIRO_STATUS_SUCCESS:CAIRO_STATUS_WRITE_ERROR;
}
Теперь я не знаю, будет ли это возвращать CAIRO_STATUS_WRITE_ERROR при ошибке, так как я не уверен, что возвращаемое значение write
. Однако этот код работает.
Чтобы позвонить, я использовал:
surface->write_to_png_stream(&write_stdout);
surface
был определен так:
Cairo::RefPtr<Cairo::ImageSurface> surface =
Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, WIDTH, HEIGHT);
По сути, это нормальная поверхность. В любом случае, еще раз спасибо Керреку за ответ, и я надеюсь, что это кому-нибудь поможет.