基本概念
图像表示图像元素( 像素 ) 的矩形网格。在图像包中,像素被表示为图像/颜色包中定义的颜色之一 。图像的二维几何形状表示为 image.Rectangle
,而 image.Point
表示网格上的位置。
https://i.stack.imgur.com/PbRoJ.jpg
上图说明了包中图像的基本概念。尺寸 15x14 像素的图像具有矩形边界处开始左上拐角(例如坐标(-3,-4)在如上图所示),它的轴增加向右和向下到右下拐角(例如坐标(图 10 中的图 10)。请注意,边界不一定从点(0,0)开始或包含点(0,0) 。
图像相关类型
在 Go
中,图像始终实现以下 image.Image
接口
type Image interface {
// ColorModel returns the Image's color model.
ColorModel() color.Model
// Bounds returns the domain for which At can return non-zero color.
// The bounds do not necessarily contain the point (0, 0).
Bounds() Rectangle
// At returns the color of the pixel at (x, y).
// At(Bounds().Min.X, Bounds().Min.Y) returns the upper-left pixel of the grid.
// At(Bounds().Max.X-1, Bounds().Max.Y-1) returns the lower-right one.
At(x, y int) color.Color
}
其中 color.Color
接口定义为
type Color interface {
// RGBA returns the alpha-premultiplied red, green, blue and alpha values
// for the color. Each value ranges within [0, 0xffff], but is represented
// by a uint32 so that multiplying by a blend factor up to 0xffff will not
// overflow.
//
// An alpha-premultiplied color component c has been scaled by alpha (a),
// so has valid values 0 <= c <= a.
RGBA() (r, g, b, a uint32)
}
和 color.Model
是一个声明为的接口
type Model interface {
Convert(c Color) Color
}
访问图像尺寸和像素
假设我们将图像存储为变量 img
,那么我们可以通过以下方式获得尺寸和图像像素:
// Image bounds and dimension
b := img.Bounds()
width, height := b.Dx(), b.Dy()
// do something with dimension ...
// Corner co-ordinates
top := b.Min.Y
left := b.Min.X
bottom := b.Max.Y
right := b.Max.X
// Accessing pixel. The (x,y) position must be
// started from (left, top) position not (0,0)
for y := top; y < bottom; y++ {
for x := left; x < right; x++ {
cl := img.At(x, y)
r, g, b, a := cl.RGBA()
// do something with r,g,b,a color component
}
}
请注意,在包中,每个 R,G,B,A
组件的值介于 0-65535
(0x0000 - 0xffff
)之间,而不是 0-255
。