github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/webp/reader_test.go (about) 1 // Copyright 2014 <chaishushan{AT}gmail.com>. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package webp 6 7 import ( 8 "image" 9 "testing" 10 11 image_ext "github.com/chai2010/gopkg/image" 12 _ "github.com/chai2010/gopkg/image/png" 13 ) 14 15 const testdataDir = "../testdata/" 16 17 // TestDecode tests that decoding a PNG image and a BMP image result in the 18 // same pixel data. 19 func TestDecode(t *testing.T) { 20 img0, _, err := image_ext.Load(testdataDir+"video-001.png", nil) 21 if err != nil { 22 t.Fatal(err) 23 } 24 25 img1, _, err := image_ext.Load(testdataDir+"video-001.webp", nil) 26 if err != nil { 27 t.Fatal(err) 28 } 29 30 // Compare the average delta to the tolerance level. 31 want := int64(12 << 8) 32 if got := averageDelta(img0, img1); got > want { 33 t.Fatalf("average delta too high; got %d, want <= %d", got, want) 34 } 35 } 36 37 // averageDelta returns the average delta in RGB space. The two images must 38 // have the same bounds. 39 func averageDelta(m0, m1 image.Image) int64 { 40 b := m0.Bounds() 41 var sum, n int64 42 for y := b.Min.Y; y < b.Max.Y; y++ { 43 for x := b.Min.X; x < b.Max.X; x++ { 44 c0 := m0.At(x, y) 45 c1 := m1.At(x, y) 46 r0, g0, b0, _ := c0.RGBA() 47 r1, g1, b1, _ := c1.RGBA() 48 sum += delta(r0, r1) 49 sum += delta(g0, g1) 50 sum += delta(b0, b1) 51 n += 3 52 } 53 } 54 return sum / n 55 } 56 57 func delta(u0, u1 uint32) int64 { 58 d := int64(u0) - int64(u1) 59 if d < 0 { 60 return -d 61 } 62 return d 63 }