php小编柚子将为大家介绍如何在Go语言中使用GOTK3和librsvg加载内联SVG。GOTK3是一个用于创建跨平台GUI应用程序的Go语言绑定库,而librsvg是一个用于渲染SVG图像的库。通过结合使用这两个库,我们可以在Go语言中轻松地加载和显示内联SVG图像。接下来,让我们一起来看看具体的实现步骤吧!
问题内容
我正在开发一个用 go 编写的应用程序。它使用 gotk3,安装了 librsvg,我可以使用 gtk.imagenewfromfile(file-path-to-svg) 创建(然后显示)svg 图像。
现在我想以编程方式从源代码中内联的 svg 创建图像……如下所示:
color := "#FF0000"redSvg := "" + ""-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">" + "" + " " + ""image, err := ImageNewFromSvg(redSvg)...func ImageNewFromSvg(svg string) (*gtk.Image, error) { ?}
登录后复制
…我需要一些关于 imagenewfromsvg() 的实现的帮助。 gotk3 没有 imagenewfromsvg() api,但它有 imagenewfrompixbuf()。
我尝试过从字符串(带有 svg 标记)创建 pixbuf,但我没能做到。
是否可以从源代码中定义的内联 svg 创建图像?如果是这样,imagenewfromsvg() 的实现是什么?
解决方法
您可以使用 gdk.pixbufnewfromdataonly 加载内联 svg,方法是将 svg 字符串作为字节片段传递给它,然后从中获取 pixbuf 并将其放入 gtk.imagenewfrompixbuf 以获得 *gtk.image 以在窗口中使用它。这是您提到的 imagenewfromsvg 函数的正确实现之一:
func imagenewfromsvg(svg string) (*gtk.image, error){ pixbuf, err := gdk.pixbufnewfromdataonly([]byte(svg)) if err != nil { return nil, err } img, err := gtk.imagenewfrompixbuf(pixbuf) if err != nil { return nil, err } return img, nil}
登录后复制
实际gtk程序中的使用示例:
package mainimport ( "log" "github.com/gotk3/gotk3/gtk" "github.com/gotk3/gotk3/gdk")func main() { gtk.Init(nil) win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL) if err != nil { log.Fatal("Unable to create window:", err) } win.SetTitle("Svg Example") win.Connect("destroy", func() { gtk.MainQuit() }) color := "#FF0000" svgdata := "" + ""-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">" + "" + " " + "" svgImage, err := ImageNewFromSvg(svgdata) if err != nil { log.Fatal(err) } win.Add(svgImage) win.ShowAll() gtk.Main()} func ImageNewFromSvg(svg string) (*gtk.Image, error){ pixbuf, err := gdk.PixbufNewFromDataOnly([]byte(svg)) if err != nil { return nil, err } img, err := gtk.ImageNewFromPixbuf(pixbuf) if err != nil { return nil, err } return img, nil}
登录后复制
输出:
以上就是如何使用 GOTK3 和 librsvg 在 Go 中加载内联 SVG?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2358521.html