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