11

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).

何かご意見は?

4

2 に答える 2

16

別のアプローチを次に示します。型アサーションを使用し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パニックを避けたい場合は、フォームを使用してください。

于 2013-04-18T21:09:37.843 に答える
8

image.ImageメソッドがないからSubImageです。適切な型を取得するには、型アサーションを使用する必要がありますimage.*

rgbImg := img.(image.RGBA)
subImg := rgbImg.SubImage(...)
于 2013-04-18T01:27:30.397 に答える