mirror of https://github.com/liamg/aminal.git
646 lines
16 KiB
Go
646 lines
16 KiB
Go
package imaging
|
|
|
|
import (
|
|
"image"
|
|
"image/color"
|
|
"testing"
|
|
)
|
|
|
|
func TestFlipH(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"FlipH 2x3",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 3),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33,
|
|
0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := FlipH(tc.src)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkFlipH(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
FlipH(testdataBranchesJPG)
|
|
}
|
|
}
|
|
|
|
func TestFlipV(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"FlipV 2x3",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 3),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := FlipV(tc.src)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkFlipV(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
FlipV(testdataBranchesJPG)
|
|
}
|
|
}
|
|
|
|
func TestTranspose(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Transpose 2x3",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 3, 2),
|
|
Stride: 3 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
|
|
0xcc, 0xdd, 0xee, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := Transpose(tc.src)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkTranspose(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
Transpose(testdataBranchesJPG)
|
|
}
|
|
}
|
|
|
|
func TestTransverse(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Transverse 2x3",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 3, 2),
|
|
Stride: 3 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xcc, 0xdd, 0xee, 0xff,
|
|
0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x33,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := Transverse(tc.src)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkTransverse(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
Transverse(testdataBranchesJPG)
|
|
}
|
|
}
|
|
|
|
func TestRotate90(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Rotate90 2x3",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 3, 2),
|
|
Stride: 3 * 4,
|
|
Pix: []uint8{
|
|
0xcc, 0xdd, 0xee, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
0x00, 0x11, 0x22, 0x33, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := Rotate90(tc.src)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkRotate90(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
Rotate90(testdataBranchesJPG)
|
|
}
|
|
}
|
|
|
|
func TestRotate180(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Rotate180 2x3",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 3),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00,
|
|
0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
|
|
0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := Rotate180(tc.src)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkRotate180(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
Rotate180(testdataBranchesJPG)
|
|
}
|
|
}
|
|
|
|
func TestRotate270(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Rotate270 2x3",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff,
|
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 3, 2),
|
|
Stride: 3 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x33,
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xcc, 0xdd, 0xee, 0xff,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := Rotate270(tc.src)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkRotate270(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
Rotate270(testdataBranchesJPG)
|
|
}
|
|
}
|
|
|
|
func TestRotate(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
src image.Image
|
|
angle float64
|
|
bg color.Color
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Rotate 0",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 3, 3),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
0,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 4, 4),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 90",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 3, 3),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
90,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 4, 4),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 180",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 3, 3),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
180,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 4, 4),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 45",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 3, 3),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
45,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 6, 6),
|
|
Stride: 6 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x61, 0x00, 0x00, 0xff, 0x58, 0x08, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
|
|
0x00, 0x00, 0x00, 0xff, 0x61, 0x00, 0x00, 0xff, 0xe9, 0x16, 0x00, 0xff, 0x35, 0xca, 0x00, 0xff, 0x00, 0x30, 0x30, 0xff, 0x00, 0x00, 0x00, 0xff,
|
|
0x61, 0x00, 0x00, 0xff, 0xe9, 0x16, 0x00, 0xff, 0x35, 0xca, 0x00, 0xff, 0x00, 0x80, 0x80, 0xff, 0x35, 0x35, 0xff, 0xff, 0x58, 0x58, 0x61, 0xff,
|
|
0x58, 0x08, 0x00, 0xff, 0x35, 0xca, 0x00, 0xff, 0x00, 0x80, 0x80, 0xff, 0x35, 0x35, 0xff, 0xff, 0xe9, 0xe9, 0xff, 0xff, 0x61, 0x61, 0x61, 0xff,
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0x30, 0x30, 0xff, 0x35, 0x35, 0xff, 0xff, 0xe9, 0xe9, 0xff, 0xff, 0x61, 0x61, 0x61, 0xff, 0x00, 0x00, 0x00, 0xff,
|
|
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x58, 0x58, 0x61, 0xff, 0x61, 0x61, 0x61, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 0x0",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 0, 0),
|
|
Stride: 0,
|
|
Pix: []uint8{},
|
|
},
|
|
123,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 0, 0),
|
|
Stride: 0,
|
|
Pix: []uint8{},
|
|
},
|
|
},
|
|
{
|
|
"Rotate -90",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
-90,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate -360*10",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
-360 * 10,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 2),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate -360*10 + 90",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
-360*10 + 90,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate -360*10 + 180",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
-360*10 + 180,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 2),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate -360*10 + 270",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
-360*10 + 270,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 360*10",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
360 * 10,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 2),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 360*10 + 90",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
360*10 + 90,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 360*10 + 180",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
360*10 + 180,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 2),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Rotate 360*10 + 270",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff,
|
|
},
|
|
},
|
|
360*10 + 270,
|
|
color.Black,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := Rotate(tc.src, tc.angle, tc.bg)
|
|
if !compareNRGBA(got, tc.want, 0) {
|
|
t.Fatalf("got result %#v want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkRotate(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
Rotate(testdataBranchesJPG, 30, color.Transparent)
|
|
}
|
|
}
|