c# - 如何从开罗保存 jpg

标签 c# svg gtk cairo librsvg

下面是我用来从 svg 文件保存 png 的代码。这行得通,但我还需要将其保存为 jpeg。有人可以建议我如何执行此操作吗?

    private void RasterizeSvg(string tempsvg, string rsltPath, int _width, int _height)
    {
        bool callSuccessful = SetDllDirectory(@"C:\ProgramDownloads\librsvg\librsvg-dev_2.32.1-1_win32\bin");
        if (!callSuccessful)
        {
            throw new Exception("Could not set DLL directory");
        }
        g_type_init();
        IntPtr error;
        IntPtr rsvghandle = rsvg_handle_new_from_file(tempsvg, out error);
        if (error != IntPtr.Zero)
        {
            throw new Exception(Marshal.ReadInt32(error).ToString());
        }
        IntPtr cairosurface = cairo_image_surface_create(cairo_format_t.CAIRO_FORMAT_RGB24, _width, _height);
        IntPtr cairorenderer = cairo_create(cairosurface);
        bool brslt = rsvg_handle_render_cairo(rsvghandle, cairorenderer);

        //cairo_surface_write_to_png(cairosurface, rsltPath);

        IntPtr pixbuf = IntPtr.Zero;
        cairo_set_source_surface(pixbuf, cairosurface, 0, 0);
        cairo_rectangle(pixbuf, 0, 0, _width, _height);
        cairo_fill(pixbuf);

        callSuccessful = gdk_pixbuf_save(pixbuf, rsltPath, "jpg", out error, __arglist(""));
        if (!callSuccessful)
        {
            throw new Exception(error.ToInt32().ToString());
        }
    }

我已经更改了 cairo_set_source 的顺序,将 cairo_rectangle 放在第一位,但我仍然遇到访问冲突

最佳答案

您将空 pixbuf 指针传递给 cairo_set_source_surface。你应该通过这样的东西......

IntPtr pixbuf = cairo_create (cairosurface);

还有

gdk_pixbuf_save 的第三个参数应该是“jpeg”

也许你也应该初始化错误?

关于c# - 如何从开罗保存 jpg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12674654/

相关文章:

c# - 数据库 'Database Name' 的凭据无效。 MongoDB 2.6.2

javascript - 如何通过 JavaScript 更改 SVG 中的图案图像参数?

c# - .NET 异步流读/写

c# - GridView 行包含超链接,单击它后应在另一个页面中显示该特定行的值

javascript - 如何将字符串格式的图像传递给JavaScript并将其写入文档

c - gtk_entry_set_activates_default 没有发挥它的魔力

python - GTK 状态图标 : Coordinates of left-click?

linux - 如何在 linux 中显示来自 bash 脚本的 GUI 消息框?

c# - 如何在.net中创建像String类这样的密封类,这样我们就可以在不创建像string str ="abc"这样的实例的情况下赋值

javascript - 从 Browserify 模块访问 DOM 时出现问题