【问题标题】:How to pass magickWand reference to functions如何将魔法和引用传递给函数
【发布时间】:2019-03-04 15:18:52
【问题描述】:

我可以知道如何将imagick.MagickWand 结构传递给函数并对其应用方法吗? imagick.NewMagickWand 好像返回了*imagick.MagickWand 的类型,不是吗?

我无法完成,不断收到错误消息:ERROR_WAND: ContainsNoImages `MagickWand-0'。

如何将正确的结构引用传递给函数,以便mw 可以在这些函数中连续使用?

func generateImage() error {
    // skip error handling
    var err error 

    mw := imagick.NewMagickWand()
    defer mw.Destroy()

    err = createCanvas(mw, "red") // create canvas
    err = compositeIcon(mw, "c:/icon.png") // add icon
    err = addText(mw, "Hello world") // add text

    err = mw.WriteImage("c:/output") // get the output
}

func createCanvas(mw *imagick.MagickWand, color string) error {
    // skip error handling
    var err error
    pw := imagick.NewPixelWand()
    defer pw.Destroy()

    pw.SetColor("blue")
    err = mw.NewImage(200, 100, pw)
    return nil
}

可以帮忙吗?新手来了:)


更新:

我给出的例子是正确。在上面的示例中正确地通过引用传递,我收到了错误,因为我忽略了我的代码并调试了错误的行。很抱歉造成混乱。

谢谢。

【问题讨论】:

    标签: go imagemagick magickwand


    【解决方案1】:

    如果mw 的类型为*imagick.MagickWand,那么*mw 的类型为imagick.MagickWand。

    也就是说,mw 是一个指向该类型的指针,而* 运算符取消引用指向类型本身的指针。

    mw := imagick.NewMagickWand() // Now mw is a *imagick.MagickWand
    *mw // Is a imagick.MagickWand
    

    【讨论】:

    • 所以,我将函数声明为createCanvas(mw *imagick.MagickWand),在函数内部,我使用mw 就像err = *mw.NewImage(200,100,pw)?现在尝试... :)
    • 收到错误消息:createCanvas passes lock by value: .../imagick.v3/imagick.MagickWand contains sync.Once contains sync.Mutex... 我尝试更改代码周围的* 位置,但无法完成。
    • 感谢您的帮助。你说的是对的……仔细检查后,我发现我天真地调试了错误的线路。谢谢。
    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2014-08-21
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多