猿问

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

我正在用 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).


有什么想法吗?


有只小跳蛙
浏览 215回答 2
2回答

Cats萌萌

这是另一种方法 - 使用类型断言来断言my_image具有SubImage方法。这适用于具有该方法的任何图像类型SubImage(除Uniform快速扫描外的所有图像)。这将返回Image一些未指定类型的另一个接口。package mainimport (    "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如果您不想恐慌,请使用该表单。

慕斯王

因为image.Image没有方法SubImage。您需要使用类型断言来获取适当的image.*类型。rgbImg := img.(image.RGBA)subImg := rgbImg.SubImage(...)
随时随地看视频慕课网APP

相关分类

Go
我要回答