登录
首页 >  Golang >  Go问答

学习在 Go 中使用 GOTK3 和 librsvg 加载嵌入式 SVG 的方法

来源:stackoverflow

时间:2024-02-11 19:12:24 458浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《学习在 Go 中使用 GOTK3 和 librsvg 加载嵌入式 SVG 的方法》,涉及到,有需要的可以收藏一下

问题内容

我正在开发一个用 go 编写的应用程序。它使用 gotk3,安装了 librsvg,我可以使用 gtk.imagenewfromfile(file-path-to-svg) 创建(然后显示)svg 图像。

现在我想以编程方式从源代码中内联的 svg 创建图像......如下所示:

color := "#FF0000"
redSvg := 
  "\n" +
  "\n" +
  "\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 以在窗口中使用它。 这是您提到的 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" +
               "\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
}

输出:

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《学习在 Go 中使用 GOTK3 和 librsvg 加载嵌入式 SVG 的方法》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>