mirror of
https://github.com/golang/go
synced 2024-11-26 10:18:12 -07:00
image: add Uniform.RGBA64At and Rectangle.RGBA64At
These types already implemented the Image interface. They should also implement the RGBA64Image interface (new in Go 1.17) Updates #44808 Change-Id: I9a2b13e305997088ae874efb95ad9e1648f94812 Reviewed-on: https://go-review.googlesource.com/c/go/+/331570 Trust: Nigel Tao <nigeltao@golang.org> Run-TryBot: Nigel Tao <nigeltao@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
This commit is contained in:
parent
c45e800e0c
commit
d19a53338f
@ -47,7 +47,9 @@ pkg image, method (*Paletted) RGBA64At(int, int) color.RGBA64
|
|||||||
pkg image, method (*Paletted) SetRGBA64(int, int, color.RGBA64)
|
pkg image, method (*Paletted) SetRGBA64(int, int, color.RGBA64)
|
||||||
pkg image, method (*RGBA) RGBA64At(int, int) color.RGBA64
|
pkg image, method (*RGBA) RGBA64At(int, int) color.RGBA64
|
||||||
pkg image, method (*RGBA) SetRGBA64(int, int, color.RGBA64)
|
pkg image, method (*RGBA) SetRGBA64(int, int, color.RGBA64)
|
||||||
|
pkg image, method (*Uniform) RGBA64At(int, int) color.RGBA64
|
||||||
pkg image, method (*YCbCr) RGBA64At(int, int) color.RGBA64
|
pkg image, method (*YCbCr) RGBA64At(int, int) color.RGBA64
|
||||||
|
pkg image, method (Rectangle) RGBA64At(int, int) color.RGBA64
|
||||||
pkg image, type RGBA64Image interface { At, Bounds, ColorModel, RGBA64At }
|
pkg image, type RGBA64Image interface { At, Bounds, ColorModel, RGBA64At }
|
||||||
pkg image, type RGBA64Image interface, At(int, int) color.Color
|
pkg image, type RGBA64Image interface, At(int, int) color.Color
|
||||||
pkg image, type RGBA64Image interface, Bounds() Rectangle
|
pkg image, type RGBA64Image interface, Bounds() Rectangle
|
||||||
|
@ -811,8 +811,8 @@ func Foo() bool {
|
|||||||
<p><!-- CL 311129 -->
|
<p><!-- CL 311129 -->
|
||||||
The concrete image types (<code>RGBA</code>, <code>Gray16</code> and so on)
|
The concrete image types (<code>RGBA</code>, <code>Gray16</code> and so on)
|
||||||
now implement a new <a href="/pkg/image/#RGBA64Image"><code>RGBA64Image</code></a>
|
now implement a new <a href="/pkg/image/#RGBA64Image"><code>RGBA64Image</code></a>
|
||||||
interface. Those concrete types, other than the chroma-subsampling
|
interface. The concrete types that previously implemented
|
||||||
related <code>YCbCr</code> and <code>NYCbCrA</code>, also now implement
|
<a href="/pkg/image/draw/#Image"><code>draw.Image</code></a> now also implement
|
||||||
<a href="/pkg/image/draw/#RGBA64Image"><code>draw.RGBA64Image</code></a>, a
|
<a href="/pkg/image/draw/#RGBA64Image"><code>draw.RGBA64Image</code></a>, a
|
||||||
new interface in the <code>image/draw</code> package.
|
new interface in the <code>image/draw</code> package.
|
||||||
</p>
|
</p>
|
||||||
|
@ -246,6 +246,14 @@ func (r Rectangle) At(x, y int) color.Color {
|
|||||||
return color.Transparent
|
return color.Transparent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RGBA64At implements the RGBA64Image interface.
|
||||||
|
func (r Rectangle) RGBA64At(x, y int) color.RGBA64 {
|
||||||
|
if (Point{x, y}).In(r) {
|
||||||
|
return color.RGBA64{0xffff, 0xffff, 0xffff, 0xffff}
|
||||||
|
}
|
||||||
|
return color.RGBA64{}
|
||||||
|
}
|
||||||
|
|
||||||
// Bounds implements the Image interface.
|
// Bounds implements the Image interface.
|
||||||
func (r Rectangle) Bounds() Rectangle {
|
func (r Rectangle) Bounds() Rectangle {
|
||||||
return r
|
return r
|
||||||
|
@ -213,7 +213,9 @@ func TestRGBA64Image(t *testing.T) {
|
|||||||
NewPaletted(r, palette.Plan9),
|
NewPaletted(r, palette.Plan9),
|
||||||
NewRGBA(r),
|
NewRGBA(r),
|
||||||
NewRGBA64(r),
|
NewRGBA64(r),
|
||||||
|
NewUniform(color.RGBA64{}),
|
||||||
NewYCbCr(r, YCbCrSubsampleRatio444),
|
NewYCbCr(r, YCbCrSubsampleRatio444),
|
||||||
|
r,
|
||||||
}
|
}
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
switch tc := tc.(type) {
|
switch tc := tc.(type) {
|
||||||
@ -226,6 +228,9 @@ func TestRGBA64Image(t *testing.T) {
|
|||||||
// means that setting one pixel can modify neighboring pixels. They
|
// means that setting one pixel can modify neighboring pixels. They
|
||||||
// don't have Set or SetRGBA64 methods because that side effect could
|
// don't have Set or SetRGBA64 methods because that side effect could
|
||||||
// be surprising. Here, we just memset the channel buffers instead.
|
// be surprising. Here, we just memset the channel buffers instead.
|
||||||
|
//
|
||||||
|
// The Uniform and Rectangle types are also special-cased, as they
|
||||||
|
// don't have a Set or SetRGBA64 method.
|
||||||
case interface {
|
case interface {
|
||||||
SetRGBA64(x, y int, c color.RGBA64)
|
SetRGBA64(x, y int, c color.RGBA64)
|
||||||
}:
|
}:
|
||||||
@ -237,11 +242,18 @@ func TestRGBA64Image(t *testing.T) {
|
|||||||
memset(tc.YCbCr.Cr, 0x99)
|
memset(tc.YCbCr.Cr, 0x99)
|
||||||
memset(tc.A, 0xAA)
|
memset(tc.A, 0xAA)
|
||||||
|
|
||||||
|
case *Uniform:
|
||||||
|
tc.C = color.RGBA64{0x7FFF, 0x3FFF, 0x0000, 0x7FFF}
|
||||||
|
|
||||||
case *YCbCr:
|
case *YCbCr:
|
||||||
memset(tc.Y, 0x77)
|
memset(tc.Y, 0x77)
|
||||||
memset(tc.Cb, 0x88)
|
memset(tc.Cb, 0x88)
|
||||||
memset(tc.Cr, 0x99)
|
memset(tc.Cr, 0x99)
|
||||||
|
|
||||||
|
case Rectangle:
|
||||||
|
// No-op. Rectangle pixels' colors are immutable. They're always
|
||||||
|
// color.Opaque.
|
||||||
|
|
||||||
default:
|
default:
|
||||||
t.Errorf("could not initialize pixels for %T", tc)
|
t.Errorf("could not initialize pixels for %T", tc)
|
||||||
continue
|
continue
|
||||||
|
@ -41,6 +41,11 @@ func (c *Uniform) Bounds() Rectangle { return Rectangle{Point{-1e9, -1e9}, Point
|
|||||||
|
|
||||||
func (c *Uniform) At(x, y int) color.Color { return c.C }
|
func (c *Uniform) At(x, y int) color.Color { return c.C }
|
||||||
|
|
||||||
|
func (c *Uniform) RGBA64At(x, y int) color.RGBA64 {
|
||||||
|
r, g, b, a := c.C.RGBA()
|
||||||
|
return color.RGBA64{uint16(r), uint16(g), uint16(b), uint16(a)}
|
||||||
|
}
|
||||||
|
|
||||||
// Opaque scans the entire image and reports whether it is fully opaque.
|
// Opaque scans the entire image and reports whether it is fully opaque.
|
||||||
func (c *Uniform) Opaque() bool {
|
func (c *Uniform) Opaque() bool {
|
||||||
_, _, _, a := c.C.RGBA()
|
_, _, _, a := c.C.RGBA()
|
||||||
|
Loading…
Reference in New Issue
Block a user