ZhangZhihui's Blog  

Problem: You want to load an image from an image file.


Solution: Use image.Decode to decode data from an image file into an implementation of image.Image .

 

If you want to work with an image from a file, you have to open up the file and then decode its content. To do this, you should already know what kind of file you are dealing with and register the type accordingly:

复制代码
func load(filePath string) (*image.NRGBA, error) {
    imgFile, err := os.Open(filePath)
    if err != nil {
        log.Println("Cannot read file:", err)
    }
    defer imgFile.Close()

    img, _, err := image.Decode(imgFile)
    if err != nil {
        log.Println("Cannot decode file:", err)
    }
    rimg, ok := img.(*image.NRGBA)
    if ok {
        return rimg, nil
    }
    return nil, errors.New("cannot type assert image")
}
复制代码

First, you need to open a file. Then using image.Decode , you decode it into the img variable. The Decode method returns three values: the first is what you want to get, the image.Image value; the second is a string signifying the format of the image; and the third is the usual error value.

Take a closer look at the img value. Since you get an Image value, why do you want to type assert to image.NRGBA before you return it? This is because Image is an interface, and NRGBA is the actual implementation:

type NRGBA struct {
    Pix    []uint8
    Stride int
    Rect   Rectangle
}

In other words, you can manipulate the NRGBA but you can’t manipulate an Image . Of course, you can still call methods on Image but you can’t directly manipulate it unless you get a hold of the underlying implementation.

 

posted on   ZhangZhihuiAAA  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
 
点击右上角即可分享
微信分享提示