如何使用 GOTK3 和 librsvg 在 Go 中加载内联 SVG?
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 :=
"\n" +
"\n" +
""
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
以在窗口中使用它。< br/>
这是您提到的 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 main
import (
"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 := "\n" +
"\n" +
""
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?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341