Here is an alternative approach - use a type assertion to assert that my_image
has a SubImage
method. This will work for any image type which has the SubImage
method (all of them except Uniform
at a quick scan). This will return another Image
interface of some unspecified type.
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())
}
If you wanted to do this a lot then you would create a new type with the SubImage
interface and use that.
type SubImager interface {
SubImage(r image.Rectangle) image.Image
}
my_sub_image := my_image.(SubImager).SubImage(image.Rect(0, 0, 10, 10))
The usual caveats with type assertions apply - use the ,ok
form if you don't want a panic.