本文整理匯總了Golang中image.Gray16.PixOffset方法的典型用法代碼示例。如果您正苦於以下問題:Golang Gray16.PixOffset方法的具體用法?Golang Gray16.PixOffset怎麽用?Golang Gray16.PixOffset使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類image.Gray16
的用法示例。
在下文中一共展示了Gray16.PixOffset方法的3個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: newAtFuncGray16
func newAtFuncGray16(p *image.Gray16) AtFunc {
return func(x, y int) (r, g, b, a uint32) {
i := p.PixOffset(x, y)
yy := uint32(p.Pix[i+0])<<8 | uint32(p.Pix[i+1])
return yy, yy, yy, 0xffff
}
}
示例2: newSetFuncGray16
func newSetFuncGray16(p *image.Gray16) SetFunc {
return func(x, y int, r, g, b, a uint32) {
i := p.PixOffset(x, y)
y16 := uint16((299*r + 587*g + 114*b + 500) / 1000)
p.Pix[i+0] = uint8(y16 >> 8)
p.Pix[i+1] = uint8(y16)
}
}
示例3: interpolate1x16
// Interpolate uint16/pixel images.
func interpolate1x16(src *image.Gray16, dstW, dstH int) image.Image {
srcRect := src.Bounds()
srcW := srcRect.Dx()
srcH := srcRect.Dy()
ww, hh := uint64(dstW), uint64(dstH)
dx, dy := uint64(srcW), uint64(srcH)
n, sum := dx*dy, make([]uint64, dstW*dstH)
for y := 0; y < srcH; y++ {
pixOffset := src.PixOffset(0, y)
for x := 0; x < srcW; x++ {
// Get the source pixel.
val64 := uint64(binary.BigEndian.Uint16([]byte(src.Pix[pixOffset+0 : pixOffset+2])))
pixOffset += 2
// Spread the source pixel over 1 or more destination rows.
py := uint64(y) * hh
for remy := hh; remy > 0; {
qy := dy - (py % dy)
if qy > remy {
qy = remy
}
// Spread the source pixel over 1 or more destination columns.
px := uint64(x) * ww
index := (py/dy)*ww + (px / dx)
for remx := ww; remx > 0; {
qx := dx - (px % dx)
if qx > remx {
qx = remx
}
qxy := qx * qy
sum[index] += val64 * qxy
index++
px += qx
remx -= qx
}
py += qy
remy -= qy
}
}
}
dst := image.NewGray16(image.Rect(0, 0, dstW, dstH))
index := 0
for y := 0; y < dstH; y++ {
pixOffset := dst.PixOffset(0, y)
for x := 0; x < dstW; x++ {
binary.BigEndian.PutUint16(dst.Pix[pixOffset+0:pixOffset+2], uint16(sum[index]/n))
pixOffset += 2
index++
}
}
return dst
}