在go语言中获取获取每个图像像素的RGBA值代码示例
Go  /  管理员 发布于 2年前   581
如果有这么个需求要你找出图像上每个像素的R、G、B、A值。
也许是为了做ASCII艺术、用于认知目的的边缘检测算法或一些高级图像处理。
你该怎么着手实现呢?
解决方式:
使用函数获取图像文件的宽度和高度,image.DecodeConfig()然后根据覆盖整个图像的图像的宽度/高度迭代每个像素。
在每个像素处,使用image.At()函数的 RGBA() 方法来检索 R、G、B、A 值。
示例代码:
package main
import (
"fmt"
"image"
"image/jpeg"
"os"
)
func init() {
// 非常重要,否则At()、Bounds()函数将
// 导致内存指针错误!!
image.RegisterFormat("jpeg", "jpeg", jpeg.Decode, jpeg.DecodeConfig)
}
func main() {
imgfile, err := os.Open("./img.jpg")
if err != nil {
fmt.Println("img.jpg文件未找到!")
os.Exit(1)
}
defer imgfile.Close()
//用image/jpeg获取图像的高度和宽度。
//根据文件是png还是gif来改变。
imgCfg, _, err := image.DecodeConfig(imgfile)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
width := imgCfg.Width
height := imgCfg.Height
fmt.Println("宽度 : ", width)
fmt.Println("高度 : ", height)
// 我们需要再次重置io.Reader,以便下面的image.Decode()函数能够工作。
// 否则我们会 - 惊慌失措:运行时错误:无效的内存地址或零指针解除引用
// io.Reader没有内置的倒退功能,使用Seek(0,0)。
imgfile.Seek(0, 0)
//获取图像
img, _, err := image.Decode(imgfile)
fmt.Println(img.At(10, 10).RGBA())
for y := 0; y < height; y++ {
for x := 0; x < width; x++ {
r, g, b, a := img.At(x, y).RGBA()
fmt.Printf("[X : %d Y : %v] R : %v, G : %v, B : %v, A : %v \n", x, y, r, g, b, a)
}
}
}
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号