为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Go 中获取图像的子图像

无法在 Go 中获取图像的子图像

Go
有只小跳蛙 2021-06-04 17:08:35
我正在用 Go 进行一些图像处理,我正在尝试获取图像的子图像。import (  "image/jpeg"  "os")func main(){  image_file, err := os.Open("somefile.jpeg")  my_image, err := jpeg.Decode(image_file)  my_sub_image := my_image.SubImage(Rect(j, i, j+x_width, i+y_width)).(*image.RGBA)}当我尝试编译它时,我得到.\img.go:8: picture.SubImage undefined (type image.Image has no field or method SubImage).有什么想法吗?
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

这是另一种方法 - 使用类型断言来断言my_image具有SubImage方法。这适用于具有该方法的任何图像类型SubImage(除Uniform快速扫描外的所有图像)。这将返回Image一些未指定类型的另一个接口。


package main


import (

    "fmt"

    "image"

    "image/jpeg"

    "log"

    "os"

)


func main() {

    image_file, err := os.Open("somefile.jpeg")

    if err != nil {

        log.Fatal(err)

    }

    my_image, err := jpeg.Decode(image_file)

    if err != nil {

        log.Fatal(err)

    }


    my_sub_image := my_image.(interface {

        SubImage(r image.Rectangle) image.Image

    }).SubImage(image.Rect(0, 0, 10, 10))


    fmt.Printf("bounds %v\n", my_sub_image.Bounds())


}

如果您想经常这样做,那么您可以SubImage使用接口创建一个新类型并使用它。


type SubImager interface {

    SubImage(r image.Rectangle) image.Image

}


my_sub_image := my_image.(SubImager).SubImage(image.Rect(0, 0, 10, 10))

类型断言的常见警告适用 -,ok如果您不想恐慌,请使用该表单。


查看完整回答
反对 回复 2021-06-07
?
慕斯王

TA贡献1864条经验 获得超2个赞

因为image.Image没有方法SubImage。您需要使用类型断言来获取适当的image.*类型。


rgbImg := img.(image.RGBA)

subImg := rgbImg.SubImage(...)


查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信