graphics: Bug fix: wrong region on a subimage

This commit is contained in:
Hajime Hoshi 2018-11-09 01:31:26 +09:00
parent ebffaeba3d
commit 03c800cb9b

View File

@ -513,8 +513,8 @@ func TestImageEdge(t *testing.T) {
const ( const (
img0Width = 16 img0Width = 16
img0Height = 16 img0Height = 16
img0InnerWidth = 6 img0InnerWidth = 10
img0InnerHeight = 6 img0InnerHeight = 10
img0OffsetWidth = (img0Width - img0InnerWidth) / 2 img0OffsetWidth = (img0Width - img0InnerWidth) / 2
img0OffsetHeight = (img0Height - img0InnerHeight) / 2 img0OffsetHeight = (img0Height - img0InnerHeight) / 2
@ -528,7 +528,7 @@ func TestImageEdge(t *testing.T) {
idx := 4 * (i + j*img0Width) idx := 4 * (i + j*img0Width)
switch { switch {
case img0OffsetWidth <= i && i < img0Width-img0OffsetWidth && case img0OffsetWidth <= i && i < img0Width-img0OffsetWidth &&
img0InnerHeight <= j && j < img0Height-img0InnerHeight: img0OffsetHeight <= j && j < img0Height-img0OffsetHeight:
pixels[idx] = 0xff pixels[idx] = 0xff
pixels[idx+1] = 0 pixels[idx+1] = 0
pixels[idx+2] = 0 pixels[idx+2] = 0
@ -555,14 +555,14 @@ func TestImageEdge(t *testing.T) {
angles = append(angles, float64(a)/4096*2*math.Pi) angles = append(angles, float64(a)/4096*2*math.Pi)
} }
img0Sub := img0.SubImage(image.Rect(img0OffsetWidth, img0InnerHeight, img0Width-img0OffsetWidth, img0Height-img0InnerHeight)).(*Image) img0Sub := img0.SubImage(image.Rect(img0OffsetWidth, img0OffsetHeight, img0Width-img0OffsetWidth, img0Height-img0OffsetHeight)).(*Image)
for _, s := range []float64{1, 0.5, 0.25} { for _, s := range []float64{1, 0.5, 0.25} {
for _, f := range []Filter{FilterNearest, FilterLinear} { for _, f := range []Filter{FilterNearest, FilterLinear} {
for _, a := range angles { for _, a := range angles {
img1.Clear() img1.Clear()
op := &DrawImageOptions{} op := &DrawImageOptions{}
w, h := img0.Size() w, h := img0Sub.Size()
op.GeoM.Translate(-float64(w)/2, -float64(h)/2) op.GeoM.Translate(-float64(w)/2, -float64(h)/2)
op.GeoM.Scale(s, s) op.GeoM.Scale(s, s)
op.GeoM.Rotate(a) op.GeoM.Rotate(a)
@ -587,11 +587,10 @@ func TestImageEdge(t *testing.T) {
continue continue
} }
} }
t.Errorf("img1.At(%d, %d) (filter: %d, scale: %f, angle: %f) want: red or transparent, got: %v", i, j, f, s, a, c) t.Fatalf("img1.At(%d, %d) (filter: %d, scale: %f, angle: %f) want: red or transparent, got: %v", i, j, f, s, a, c)
} }
} }
// TODO: Fix bug for scale 0.25 if allTransparent {
if allTransparent && s > 0.25 {
t.Fatalf("img1 (filter: %d, scale: %f, angle: %f) is transparent but should not", f, s, a) t.Fatalf("img1 (filter: %d, scale: %f, angle: %f) is transparent but should not", f, s, a)
} }
} }