我正在使用 Ubuntu Linux 和 C++ 进行开发。

我将桌面图像捕获到 XImage。

如何将 XImage 保存为 PNG 格式的 base64 字符串?

最佳答案

这是一个将 XImage 数据转换为 jpeg 图像的 C 函数:

void write_jpeg( FILE *outfile, int width, int height, unsigned char *rgb, int quality)
{
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    JSAMPROW scanline[1];
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);
    jpeg_stdio_dest(&cinfo, outfile);
    cinfo.image_width = width;
    cinfo.image_height = height;
    cinfo.input_components = 3;
    cinfo.in_color_space = JCS_RGB;
    jpeg_set_defaults(&cinfo);
    jpeg_set_quality(&cinfo, quality, TRUE);
    jpeg_start_compress(&cinfo, TRUE);
    while (cinfo.next_scanline < (unsigned int) height)
    {
        scanline[0] = rgb + 3 * width * cinfo.next_scanline;
        jpeg_write_scanlines(&cinfo, scanline, 1);
    }
    jpeg_finish_compress(&cinfo);
    jpeg_destroy_compress(&cinfo);
}

我相信您可以轻松地将其放入您的代码中。您只需要使用适当的库来保存 PNG 文件(而不是 jpeg 文件)。

10-07 14:01