]> Cypherpunks repositories - gostls13.git/commitdiff
image/png: implement truecolor transparency.
authorNigel Tao <nigeltao@golang.org>
Thu, 27 Oct 2016 05:19:15 +0000 (16:19 +1100)
committerNigel Tao <nigeltao@golang.org>
Thu, 27 Oct 2016 22:27:41 +0000 (22:27 +0000)
Change-Id: I99b9a51db29d514ebaa9c1cfde65c0b5184c0f42
Reviewed-on: https://go-review.googlesource.com/32140
Reviewed-by: Rob Pike <r@golang.org>
29 files changed:
src/image/png/reader.go
src/image/png/reader_test.go
src/image/png/testdata/pngsuite/README
src/image/png/testdata/pngsuite/ftbbn0g01.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbbn0g02.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbbn0g04.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbbn2c16.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbbn2c16.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbbn3p08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbbn3p08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbgn2c16.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbgn2c16.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbgn3p08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbgn3p08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbrn2c08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbrn2c08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbwn0g16.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbwn3p08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbwn3p08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbyn3p08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftbyn3p08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp0n0g08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp0n0g08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp0n2c08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp0n2c08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp0n3p08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp0n3p08.sng [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp1n3p08.png [new file with mode: 0644]
src/image/png/testdata/pngsuite/ftp1n3p08.sng [new file with mode: 0644]

index 44214eda2968458d5127bbccdb2dff5dabd8bb1c..9b07d406efa8cf7d3d27da3a406fa31f193109da 100644 (file)
@@ -113,6 +113,11 @@ type decoder struct {
        idatLength    uint32
        tmp           [3 * 256]byte
        interlace     int
+
+       // useTransparent and transparent are used for grayscale and truecolor
+       // transparency, as opposed to palette transparency.
+       useTransparent bool
+       transparent    [6]byte
 }
 
 // A FormatError reports that the input is not a valid PNG.
@@ -252,20 +257,33 @@ func (d *decoder) parsePLTE(length uint32) error {
 }
 
 func (d *decoder) parsetRNS(length uint32) error {
-       if length > 256 {
-               return FormatError("bad tRNS length")
-       }
-       n, err := io.ReadFull(d.r, d.tmp[:length])
-       if err != nil {
-               return err
-       }
-       d.crc.Write(d.tmp[:n])
        switch d.cb {
-       case cbG8, cbG16:
+       case cbG1, cbG2, cbG4, cbG8, cbG16:
                return UnsupportedError("grayscale transparency")
+
        case cbTC8, cbTC16:
-               return UnsupportedError("truecolor transparency")
+               if length != 6 {
+                       return FormatError("bad tRNS length")
+               }
+               n, err := io.ReadFull(d.r, d.tmp[:length])
+               if err != nil {
+                       return err
+               }
+               d.crc.Write(d.tmp[:n])
+
+               copy(d.transparent[:], d.tmp[:length])
+               d.useTransparent = true
+
        case cbP1, cbP2, cbP4, cbP8:
+               if length > 256 {
+                       return FormatError("bad tRNS length")
+               }
+               n, err := io.ReadFull(d.r, d.tmp[:length])
+               if err != nil {
+                       return err
+               }
+               d.crc.Write(d.tmp[:n])
+
                if len(d.palette) < n {
                        d.palette = d.palette[:n]
                }
@@ -273,7 +291,8 @@ func (d *decoder) parsetRNS(length uint32) error {
                        rgba := d.palette[i].(color.RGBA)
                        d.palette[i] = color.NRGBA{rgba.R, rgba.G, rgba.B, d.tmp[i]}
                }
-       case cbGA8, cbGA16, cbTCA8, cbTCA16:
+
+       default:
                return FormatError("tRNS, color type mismatch")
        }
        return d.verifyChecksum()
@@ -366,7 +385,7 @@ func (d *decoder) decode() (image.Image, error) {
 
 // readImagePass reads a single image pass, sized according to the pass number.
 func (d *decoder) readImagePass(r io.Reader, pass int, allocateOnly bool) (image.Image, error) {
-       var bitsPerPixel int = 0
+       bitsPerPixel := 0
        pixOffset := 0
        var (
                gray     *image.Gray
@@ -402,8 +421,13 @@ func (d *decoder) readImagePass(r io.Reader, pass int, allocateOnly bool) (image
                img = nrgba
        case cbTC8:
                bitsPerPixel = 24
-               rgba = image.NewRGBA(image.Rect(0, 0, width, height))
-               img = rgba
+               if d.useTransparent {
+                       nrgba = image.NewNRGBA(image.Rect(0, 0, width, height))
+                       img = nrgba
+               } else {
+                       rgba = image.NewRGBA(image.Rect(0, 0, width, height))
+                       img = rgba
+               }
        case cbP1, cbP2, cbP4, cbP8:
                bitsPerPixel = d.depth
                paletted = image.NewPaletted(image.Rect(0, 0, width, height), d.palette)
@@ -422,8 +446,13 @@ func (d *decoder) readImagePass(r io.Reader, pass int, allocateOnly bool) (image
                img = nrgba64
        case cbTC16:
                bitsPerPixel = 48
-               rgba64 = image.NewRGBA64(image.Rect(0, 0, width, height))
-               img = rgba64
+               if d.useTransparent {
+                       nrgba64 = image.NewNRGBA64(image.Rect(0, 0, width, height))
+                       img = nrgba64
+               } else {
+                       rgba64 = image.NewRGBA64(image.Rect(0, 0, width, height))
+                       img = rgba64
+               }
        case cbTCA16:
                bitsPerPixel = 64
                nrgba64 = image.NewNRGBA64(image.Rect(0, 0, width, height))
@@ -515,16 +544,37 @@ func (d *decoder) readImagePass(r io.Reader, pass int, allocateOnly bool) (image
                                nrgba.SetNRGBA(x, y, color.NRGBA{ycol, ycol, ycol, cdat[2*x+1]})
                        }
                case cbTC8:
-                       pix, i, j := rgba.Pix, pixOffset, 0
-                       for x := 0; x < width; x++ {
-                               pix[i+0] = cdat[j+0]
-                               pix[i+1] = cdat[j+1]
-                               pix[i+2] = cdat[j+2]
-                               pix[i+3] = 0xff
-                               i += 4
-                               j += 3
+                       if d.useTransparent {
+                               pix, i, j := nrgba.Pix, pixOffset, 0
+                               tr, tg, tb := d.transparent[1], d.transparent[3], d.transparent[5]
+                               for x := 0; x < width; x++ {
+                                       r := cdat[j+0]
+                                       g := cdat[j+1]
+                                       b := cdat[j+2]
+                                       a := byte(0xff)
+                                       if r == tr && g == tg && b == tb {
+                                               a = 0x00
+                                       }
+                                       pix[i+0] = r
+                                       pix[i+1] = g
+                                       pix[i+2] = b
+                                       pix[i+3] = a
+                                       i += 4
+                                       j += 3
+                               }
+                               pixOffset += nrgba.Stride
+                       } else {
+                               pix, i, j := rgba.Pix, pixOffset, 0
+                               for x := 0; x < width; x++ {
+                                       pix[i+0] = cdat[j+0]
+                                       pix[i+1] = cdat[j+1]
+                                       pix[i+2] = cdat[j+2]
+                                       pix[i+3] = 0xff
+                                       i += 4
+                                       j += 3
+                               }
+                               pixOffset += rgba.Stride
                        }
-                       pixOffset += rgba.Stride
                case cbP1:
                        for x := 0; x < width; x += 8 {
                                b := cdat[x/8]
@@ -586,11 +636,27 @@ func (d *decoder) readImagePass(r io.Reader, pass int, allocateOnly bool) (image
                                nrgba64.SetNRGBA64(x, y, color.NRGBA64{ycol, ycol, ycol, acol})
                        }
                case cbTC16:
-                       for x := 0; x < width; x++ {
-                               rcol := uint16(cdat[6*x+0])<<8 | uint16(cdat[6*x+1])
-                               gcol := uint16(cdat[6*x+2])<<8 | uint16(cdat[6*x+3])
-                               bcol := uint16(cdat[6*x+4])<<8 | uint16(cdat[6*x+5])
-                               rgba64.SetRGBA64(x, y, color.RGBA64{rcol, gcol, bcol, 0xffff})
+                       if d.useTransparent {
+                               tr := uint16(d.transparent[0])<<8 | uint16(d.transparent[1])
+                               tg := uint16(d.transparent[2])<<8 | uint16(d.transparent[3])
+                               tb := uint16(d.transparent[4])<<8 | uint16(d.transparent[5])
+                               for x := 0; x < width; x++ {
+                                       rcol := uint16(cdat[6*x+0])<<8 | uint16(cdat[6*x+1])
+                                       gcol := uint16(cdat[6*x+2])<<8 | uint16(cdat[6*x+3])
+                                       bcol := uint16(cdat[6*x+4])<<8 | uint16(cdat[6*x+5])
+                                       acol := uint16(0xffff)
+                                       if rcol == tr && gcol == tg && bcol == tb {
+                                               acol = 0x0000
+                                       }
+                                       nrgba64.SetNRGBA64(x, y, color.NRGBA64{rcol, gcol, bcol, acol})
+                               }
+                       } else {
+                               for x := 0; x < width; x++ {
+                                       rcol := uint16(cdat[6*x+0])<<8 | uint16(cdat[6*x+1])
+                                       gcol := uint16(cdat[6*x+2])<<8 | uint16(cdat[6*x+3])
+                                       bcol := uint16(cdat[6*x+4])<<8 | uint16(cdat[6*x+5])
+                                       rgba64.SetRGBA64(x, y, color.RGBA64{rcol, gcol, bcol, 0xffff})
+                               }
                        }
                case cbTCA16:
                        for x := 0; x < width; x++ {
index 0bc4203acbe496abcaea89c242b05f7fb6d54670..72afea8d660b5ff43c2ae703fa38e62555517ba8 100644 (file)
@@ -39,6 +39,21 @@ var filenames = []string{
        "basn4a16",
        "basn6a08",
        "basn6a16",
+       //"ftbbn0g01", // TODO: grayscale transparency.
+       //"ftbbn0g02", // TODO: grayscale transparency.
+       //"ftbbn0g04", // TODO: grayscale transparency.
+       "ftbbn2c16",
+       "ftbbn3p08",
+       "ftbgn2c16",
+       "ftbgn3p08",
+       "ftbrn2c08",
+       //"ftbwn0g16", // TODO: grayscale transparency.
+       "ftbwn3p08",
+       "ftbyn3p08",
+       "ftp0n0g08",
+       "ftp0n2c08",
+       "ftp0n3p08",
+       "ftp1n3p08",
 }
 
 var filenamesPaletted = []string{
@@ -64,6 +79,38 @@ func readPNG(filename string) (image.Image, error) {
        return Decode(f)
 }
 
+// fakebKGDs maps from filenames to fake bKGD chunks for our approximation to
+// the sng command-line tool. Package png doesn't keep that metadata when
+// png.Decode returns an image.Image.
+var fakebKGDs = map[string]string{
+       "ftbbn0g01": "bKGD {gray: 0;}\n",
+       "ftbbn0g02": "bKGD {gray: 0;}\n",
+       "ftbbn0g04": "bKGD {gray: 0;}\n",
+       "ftbbn2c16": "bKGD {red: 0;  green: 0;  blue: 65535;}\n",
+       "ftbbn3p08": "bKGD {index: 245}\n",
+       "ftbgn2c16": "bKGD {red: 0;  green: 65535;  blue: 0;}\n",
+       "ftbgn3p08": "bKGD {index: 245}\n",
+       "ftbrn2c08": "bKGD {red: 255;  green: 0;  blue: 0;}\n",
+       "ftbwn0g16": "bKGD {gray: 65535;}\n",
+       "ftbwn3p08": "bKGD {index: 0}\n",
+       "ftbyn3p08": "bKGD {index: 245}\n",
+}
+
+// fakeIHDRUsings maps from filenames to fake IHDR "using" lines for our
+// approximation to the sng command-line tool. The PNG model is that
+// transparency (in the tRNS chunk) is separate to the color/grayscale/palette
+// color model (in the IHDR chunk). The Go model is that the concrete
+// image.Image type returned by png.Decode, such as image.RGBA (with all pixels
+// having 100% alpha) or image.NRGBA, encapsulates whether or not the image has
+// transparency. This map is a hack to work around the fact that the Go model
+// can't otherwise discriminate PNG's "IHDR says color (with no alpha) but tRNS
+// says alpha" and "IHDR says color with alpha".
+var fakeIHDRUsings = map[string]string{
+       "ftbbn2c16": "    using color;\n",
+       "ftbgn2c16": "    using color;\n",
+       "ftbrn2c08": "    using color;\n",
+}
+
 // An approximation of the sng command-line tool.
 func sng(w io.WriteCloser, filename string, png image.Image) {
        defer w.Close()
@@ -95,25 +142,31 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
        // Write the filename and IHDR.
        io.WriteString(w, "#SNG: from "+filename+".png\nIHDR {\n")
        fmt.Fprintf(w, "    width: %d; height: %d; bitdepth: %d;\n", bounds.Dx(), bounds.Dy(), bitdepth)
-       switch {
-       case cm == color.RGBAModel, cm == color.RGBA64Model:
-               io.WriteString(w, "    using color;\n")
-       case cm == color.NRGBAModel, cm == color.NRGBA64Model:
-               io.WriteString(w, "    using color alpha;\n")
-       case cm == color.GrayModel, cm == color.Gray16Model:
-               io.WriteString(w, "    using grayscale;\n")
-       case cpm != nil:
-               io.WriteString(w, "    using color palette;\n")
-       default:
-               io.WriteString(w, "unknown PNG decoder color model\n")
+       if s, ok := fakeIHDRUsings[filename]; ok {
+               io.WriteString(w, s)
+       } else {
+               switch {
+               case cm == color.RGBAModel, cm == color.RGBA64Model:
+                       io.WriteString(w, "    using color;\n")
+               case cm == color.NRGBAModel, cm == color.NRGBA64Model:
+                       io.WriteString(w, "    using color alpha;\n")
+               case cm == color.GrayModel, cm == color.Gray16Model:
+                       io.WriteString(w, "    using grayscale;\n")
+               case cpm != nil:
+                       io.WriteString(w, "    using color palette;\n")
+               default:
+                       io.WriteString(w, "unknown PNG decoder color model\n")
+               }
        }
        io.WriteString(w, "}\n")
 
-       // We fake a gAMA output. The test files have a gAMA chunk but the go PNG parser ignores it
-       // (the PNG spec section 11.3 says "Ancillary chunks may be ignored by a decoder").
+       // We fake a gAMA chunk. The test files have a gAMA chunk but the go PNG
+       // parser ignores it (the PNG spec section 11.3 says "Ancillary chunks may
+       // be ignored by a decoder").
        io.WriteString(w, "gAMA {1.0000}\n")
 
        // Write the PLTE and tRNS (if applicable).
+       useTransparent := false
        if cpm != nil {
                lastAlpha := -1
                io.WriteString(w, "PLTE {\n")
@@ -133,6 +186,9 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
                        fmt.Fprintf(w, "    (%3d,%3d,%3d)     # rgb = (0x%02x,0x%02x,0x%02x)\n", r, g, b, r, g, b)
                }
                io.WriteString(w, "}\n")
+               if s, ok := fakebKGDs[filename]; ok {
+                       io.WriteString(w, s)
+               }
                if lastAlpha != -1 {
                        io.WriteString(w, "tRNS {\n")
                        for i := 0; i <= lastAlpha; i++ {
@@ -142,6 +198,28 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
                        }
                        io.WriteString(w, "}\n")
                }
+       } else if strings.HasPrefix(filename, "ft") {
+               if s, ok := fakebKGDs[filename]; ok {
+                       io.WriteString(w, s)
+               }
+               // We fake a tRNS chunk. The test files' grayscale and truecolor
+               // transparent images all have their top left corner transparent.
+               switch c := png.At(0, 0).(type) {
+               case color.NRGBA:
+                       if c.A == 0 {
+                               useTransparent = true
+                               io.WriteString(w, "tRNS {\n")
+                               fmt.Fprintf(w, "    red: %d; green: %d; blue: %d;\n", c.R, c.G, c.B)
+                               io.WriteString(w, "}\n")
+                       }
+               case color.NRGBA64:
+                       if c.A == 0 {
+                               useTransparent = true
+                               io.WriteString(w, "tRNS {\n")
+                               fmt.Fprintf(w, "    red: %d; green: %d; blue: %d;\n", c.R, c.G, c.B)
+                               io.WriteString(w, "}\n")
+                       }
+               }
        }
 
        // Write the IMAGE.
@@ -171,12 +249,20 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
                case cm == color.NRGBAModel:
                        for x := bounds.Min.X; x < bounds.Max.X; x++ {
                                nrgba := png.At(x, y).(color.NRGBA)
-                               fmt.Fprintf(w, "%02x%02x%02x%02x ", nrgba.R, nrgba.G, nrgba.B, nrgba.A)
+                               if useTransparent {
+                                       fmt.Fprintf(w, "%02x%02x%02x ", nrgba.R, nrgba.G, nrgba.B)
+                               } else {
+                                       fmt.Fprintf(w, "%02x%02x%02x%02x ", nrgba.R, nrgba.G, nrgba.B, nrgba.A)
+                               }
                        }
                case cm == color.NRGBA64Model:
                        for x := bounds.Min.X; x < bounds.Max.X; x++ {
                                nrgba64 := png.At(x, y).(color.NRGBA64)
-                               fmt.Fprintf(w, "%04x%04x%04x%04x ", nrgba64.R, nrgba64.G, nrgba64.B, nrgba64.A)
+                               if useTransparent {
+                                       fmt.Fprintf(w, "%04x%04x%04x ", nrgba64.R, nrgba64.G, nrgba64.B)
+                               } else {
+                                       fmt.Fprintf(w, "%04x%04x%04x%04x ", nrgba64.R, nrgba64.G, nrgba64.B, nrgba64.A)
+                               }
                        }
                case cpm != nil:
                        var b, c int
@@ -256,8 +342,23 @@ func TestReader(t *testing.T) {
                        }
                        ps := pb.Text()
                        ss := sb.Text()
+
+                       // Newer versions of the sng command line tool append an optional
+                       // color name to the RGB tuple. For example:
+                       //      # rgb = (0xff,0xff,0xff) grey100
+                       //      # rgb = (0x00,0x00,0xff) blue1
+                       // instead of the older version's plainer:
+                       //      # rgb = (0xff,0xff,0xff)
+                       //      # rgb = (0x00,0x00,0xff)
+                       // We strip any such name.
+                       if strings.Contains(ss, "# rgb = (") && !strings.HasSuffix(ss, ")") {
+                               if i := strings.LastIndex(ss, ") "); i >= 0 {
+                                       ss = ss[:i+1]
+                               }
+                       }
+
                        if ps != ss {
-                               t.Errorf("%s: Mismatch\n%sversus\n%s\n", fn, ps, ss)
+                               t.Errorf("%s: Mismatch\n%s\nversus\n%s\n", fn, ps, ss)
                                break
                        }
                }
index c0f78bde87a567bb8ab9017d3ee0b4abc7fc0155..0b3676d56ad16377a0d9b2d93e723dc89f1b3800 100644 (file)
@@ -1,21 +1,20 @@
 The *.png and README.original files in this directory are copied from
-libpng.org, specifically contrib/pngsuite/* in libpng-1.2.40.tar.gz.
+libpng.org, specifically contrib/pngsuite/* in libpng 1.6.26.
+
 README.original gives the following license for those files:
 
        Permission to use, copy, and distribute these images for any purpose
        and without fee is hereby granted.
 
-
-The files basn0g01-30.png, basn0g02-29.png and basn0g04-31.png are in fact
-not part of pngsuite but were created from files in pngsuite. Their non-power-
-of-two sizes makes them useful for testing bit-depths smaller than a byte.
+The files basn0g01-30.png, basn0g02-29.png and basn0g04-31.png are in fact not
+part of pngsuite but were created from files in pngsuite. Their non-power-of-2
+sizes makes them useful for testing bit-depths smaller than a byte.
 
 basn3a08.png was generated from basn6a08.png using the pngnq tool, which
 converted it to the 8-bit paletted image with alpha values in tRNS chunk.
 
-The *.sng files in this directory were generated from the *.png files
-by the sng command-line tool and some hand editing. The files
-basn0g0{1,2,4}.sng were actually generated by first converting the PNG
-to a bitdepth of 8 and then running sng on them. basn4a08.sng was generated
-by from a 16-bit rgba version of basn4a08.png rather than the original
-gray + alpha.
+The *.sng files in this directory were generated from the *.png files by the
+sng command-line tool and some hand editing. The files basn0g0{1,2,4}.sng were
+actually generated by first converting the PNG to a bitdepth of 8 and then
+running sng on them. basn4a08.sng was generated from a 16-bit rgba version of
+basn4a08.png rather than the original gray + alpha.
diff --git a/src/image/png/testdata/pngsuite/ftbbn0g01.png b/src/image/png/testdata/pngsuite/ftbbn0g01.png
new file mode 100644 (file)
index 0000000..ba746ff
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbbn0g01.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbbn0g02.png b/src/image/png/testdata/pngsuite/ftbbn0g02.png
new file mode 100644 (file)
index 0000000..3d83bd6
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbbn0g02.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbbn0g04.png b/src/image/png/testdata/pngsuite/ftbbn0g04.png
new file mode 100644 (file)
index 0000000..39a7050
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbbn0g04.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbbn2c16.png b/src/image/png/testdata/pngsuite/ftbbn2c16.png
new file mode 100644 (file)
index 0000000..dd3168e
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbbn2c16.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbbn2c16.sng b/src/image/png/testdata/pngsuite/ftbbn2c16.sng
new file mode 100644 (file)
index 0000000..76989fa
--- /dev/null
@@ -0,0 +1,45 @@
+#SNG: from ftbbn2c16.png
+IHDR {
+    width: 32; height: 32; bitdepth: 16;
+    using color;
+}
+gAMA {1.0000}
+bKGD {red: 0;  green: 0;  blue: 65535;}
+tRNS {
+    red: 65535; green: 65535; blue: 65535;
+}
+IMAGE {
+    pixels hex
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff e3e3e3e3e3e3 c9c9c9c9c9c9 f1f1f1f1f1f1 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff e8e8e8e8e8e8 b5b5b5b5b5b5 7e7e7e7e7e7e 656565656565 6e6e52525252 7e7e2e2e2e2e a6a643434343 c7c790909090 ebebdddddddd ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff eeeeeeeeeeee bfbfbfbfbfbf 898989898989 676767676767 6b6b5d5d5d5d 7a7a39393939 8a8a12121212 8d8d00010000 858500000000 777700000000 848400000000 9a9a01010101 a2a22d2d2d2d bfbf7d7d7d7d ddddd0d0d0d0 fcfcfcfcfcfc ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff f2f2f2f2f2f2 c4c4c4c4c4c4 959595959595 727272727272 6f6f6b6b6b6b 777744444444 87871e1e1e1e 959501010101 9f9f00010000 919100000000 808000010000 72720c0c0c0c 61612d2d2d2d 53530e0e0e0e 505000000000 595900010000 858500000000 929206060606 7a7a66666666 a0a0a0a0a0a0 cfcfcfcfcfcf f8f8f8f8f8f8 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff f7f7f7f7f7f7 cacacacacaca 9a9a9a9a9a9a 767676767676 737373737373 7c7c5d5d5d5d 87872e2e2e2e 939307070707 9e9e00010000 a9a900000000 b0b000000000 c9c900000000 cfcf00000000 b9b900010000 a2a201010101 8c8c19191919 85852a2a2a2a 7f7f13131313 818100010000 969600000000 8f8f00000000 6b6b53535353 6e6e6e6e6e6e 737373737373 767676767676 9b9b9b9b9b9b c4c4c4c4c4c4 eeeeeeeeeeee ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff cccccccccccc 7f7f7f7f7f7f 767676767676 757575757575 757575757575 96962f2f2f2f b8b800010000 b4b400000000 b6b600010000 adad0c0c0c0c 94943a3a3a3a 929250505050 b9b923232323 d6d602020202 e2e200010000 efef00000000 e7e700000000 dada00000000 cfcf00010000 baba00000000 7d7d01010101 6f6f6b6b6b6b 757575757575 757575757575 757575757575 757575757575 6a6a6a6a6a6a 9a9a9a9a9a9a ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff dcdcdcdcdcdc 858585858585 888888888888 848484848484 7b7b7b7b7b7b 858554545454 b7b713131313 a9a91d1d1d1d 8d8d4f4f4f4f 787875757575 777777777777 777777777777 777777777777 81816b6b6b6b aaaa41414141 d6d620202020 ecec10101010 e9e90c0c0c0c d0d012121212 a5a528282828 7b7b58585858 777777777777 777777777777 777777777777 707070707070 5c5c5c5c5c5c 525252525252 bdbdbdbdbdbd ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff eaeaeaeaeaea 848484848484 818181818181 858588888585 8e8e8e8e8e8e 898989898989 7f7f7f7f7f7f 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 767676767676 636363636363 545454545454 505050505050 4c4c4c4c4c4c e6e6e6e6e6e6 ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff f8f8f8f8f8f8 7f7f84847f7f 252597972525 0404a5a50404 3939a4a43939 8b8b94948b8b 939393939393 8f8f8f8f8f8f 838383838383 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7a7a7a7a7a7a 7a7a7a7a7a7a 797979797979 6a6a6a6a6a6a 575757575757 505050505050 4c4c4c4c4c4c 494949494949 595959595959 ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff 8a8a8a8a8a8a 0101b3b30101 0000c6c60001 0000f2f20000 5959b6b65959 929292929292 959595959595 979797979797 949494949494 878787878787 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 717171717171 5a5a5a5a6060 282828288585 040404049393 0c0c0c0c7878 282828285858 464646464a4a 828282828282 ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff 929292929292 0c0cabab0c0c 0000bdbd0001 0000f4f40000 2020dddd2020 919191919191 949494949494 979797979797 999999999999 9b9b9b9b9b9b 999999999999 8b8b8b8b8b8b 7f7f7f7f7f7f 7e7e7e7e7e7e 7e7e7e7e7e7e 7d7d7d7d7d7d 777777777777 626262626262 535353536060 12121212bebe 00010000cccc 000000009292 000000016969 000000006767 2a2a2a2a5555 acacacacacac ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff 949494949494 1616a1a11616 0000b4b40001 0000e2e20000 0000f4f40000 7676a2a27676 939393939393 8d8d97978d8d 46469e9e4646 4646a7a74646 8e8e9e9e8e8e 9e9e9e9e9e9e 9c9c9c9c9c9c 8e8e8e8e8e8e 7e7e7e7e7e7e 6a6a6a6a6a6a 5a5a5a5a5a5a 575757575a5a 18181818cdcd 00010000f0f0 00000000a0a0 020202026060 010101013d3d 000100006161 1d1d1d1d5959 d6d6d6d6d6d6 ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff a4a4a4a4a4a4 212198982121 0000aaaa0001 0000c8c80000 0000f4f40000 3b3bcaca3b3b 929292929292 4a4aacac4a4a 0001bcbc0000 0000a9a90000 2f2f9a9a2f2f 9d9d9d9d9d9d 9f9f9f9f9f9f a0a0a0a0a0a0 7a7a7a7a7a7a 5a5a5a5a5a5a 595959595959 31313131a1a1 00010000ffff 00000000c6c6 030303035b5b 191919192424 0c0c0c0c1515 0c0c0c0c5555 3b3b3b3b5353 fbfbfbfbfbfb ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff b6b6b6b6b6b6 2b2b8f8f2b2b 0000a2a20001 0000adad0000 0000ebeb0000 0707eded0707 898995958989 4343a7a74343 0001c9c90000 000099990000 383895953838 9c9c9c9c9c9c 9e9e9e9e9e9e 9f9f9f9f9f9f 747474747474 595959595959 505050506767 05050505f5f5 00010000f0f0 030303037070 383838384646 484848484848 161616163939 2b2b2b2b5555 727272727272 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff c7c7c7c7c7c7 343486863434 0000b1b10001 00008d8d0000 0000d2d20000 0000f3f30000 4c4c9b9b4c4c 3b3b9e9e3b3b 0001c7c70000 000098980000 3d3d94943d3d 9b9b9b9b9b9b 9d9d9d9d9d9d 9e9e9e9e9e9e 6e6e6e6e6e6e 595959595959 2b2b2b2badad 00000001ffff 00000000a6a6 252525255959 434343434f4f 161616167e7e 000000019f9f 010101018e8e 9c9c9c9ca1a1 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff d8d8d8d8d8d8 3e3e7d7d3e3e 0000b1b10001 00007b7b0000 0000b8b80000 0000f1f10000 17178b8b1717 3b3b9c9c3b3b 0001c6c60000 000097970000 3d3d93933d3d 9a9a9a9a9a9a 9b9b9b9b9b9b 9d9d9d9d9d9d 676767676767 575757575959 09090909eeee 00000001f0f0 040404046b6b 333333335a5a 070707079090 000000009e9e 000000017c7c 0d0d0d0d5d5d c7c7c7c7c7c7 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff eaeaeaeaeaea 474774744747 0000adad0001 000085850000 090998980909 0000dcdc0000 0000a7a70000 232398982323 0001c3c30000 000096960000 3f3f92923f3f 989898989898 9a9a9a9a9a9a 9c9c9c9c9c9c 616161616161 424242427f7f 00010000ffff 00000001b9b9 1a1a1a1a5d5d 161616164949 000000007b7b 000000006b6b 000000016b6b 1c1c1c1c5656 f4f4f4f4f4f4 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff fcfcfcfcfcfc 50506c6c5050 0000a9a90001 000095950000 2d2d77772d2d 0000c1c10000 0000c5c50000 010193930101 0001c1c10000 000090900000 4b4b91914b4b 979797979797 999999999999 9a9a9a9a9a9a 5a5a5a5a5a5a 2b2b2b2ba4a4 00010000f6f6 000000018686 2f2f2f2f5353 191919193030 020202026363 000000007373 000000019b9b 4d4d4d4d7070 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff 686873736868 0000a4a40001 0000a4a40000 3e3e65653e3e 1414a5a51414 0000d4d40000 00008b8b0001 0000bfbf0000 00008e8e0000 4a4a90904a4a 959595959595 979797979797 969696969696 575757575757 1a1a1a1ab5b5 00010000dede 000000016868 3f3f3f3f4b4b 2b2b2b2b2b2b 0c0c0c0c6d6d 00000000b3b3 000000016b6b 868686869292 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff 8c8c8c8c8c8c 05059e9e0505 0001b0b00000 343466663434 404085854040 0000caca0000 000097970001 0000bcbc0000 00008c8c0000 49498e8e4949 939393939393 959595959595 8f8f8f8f8f8f 565656565656 0f0f0f0fb7b7 00010000b9b9 030303036666 474747474747 2f2f2f2f6464 00010000a2a2 000000009d9d 090909095858 c5c5c5c5c5c5 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff fafafafafafa 9090b0b09090 343485853434 616164646161 63636a6a6363 0606afaf0606 0000aeae0001 0000b9b90000 00008b8b0000 53538d8d5353 919191919191 939393939393 898989898989 555555555555 0a0a0a0aa8a8 000100009d9d 070707076363 343434345c5c 040404049b9b 00010000b1b1 1a1a1a1a4d4d b5b5b5b5bbbb ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff d0d0d0d0d0d0 6d6d6d6d6d6d 656565656565 2d2d8f8f2d2d 0000b2b20001 0000b6b60000 000089890000 55558b8b5555 8f8f8f8f8f8f 919191919191 818181818181 555555555555 151515157e7e 000100008484 010101016565 010101018484 000100009191 1c1c1c1c6e6e cecececed0d0 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ecececececec 868686868686 585870705858 0000afaf0001 0000b3b30000 000088880000 535389895353 8d8d8d8d8d8d 8f8f8f8f8f8f 7a7a7a7a7a7a 545454545454 2c2c2c2c4949 020202026b6b 000000016464 000000006363 292929297474 dfdfdfdfe5e5 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff fcfcfcfcfcfc aaaaaaaaaaaa 212198982121 0001b0b00000 000086860000 575787875757 8b8b8b8b8b8b 8d8d8d8d8d8d 747474747474 535353535353 3d3d3d3d3d3d 1a1a1a1a2323 0d0d0d0d4343 474747477272 ededededefef ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff d1d1d6d6d1d1 38389b9b3838 2d2d77772d2d 7d7d81817d7d 888888888888 8b8b8b8b8b8b 6d6d6d6d6d6d 525252525252 4f4f4f4f4f4f 373737373737 777777777777 fafafafafafa ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff efefefefefef a0a0a0a0a0a0 838383838383 868686868686 888888888888 676767676767 515151515151 505050505050 a0a0a0a0a0a0 fdfdfdfdfdfd ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff fefefefefefe c0c0c0c0c0c0 858585858585 868686868686 616161616161 525252525252 b7b7b7b7b7b7 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff dededededede 909090909090 656565656565 cccccccccccc ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff f5f5f5f5f5f5 e3e3e3e3e3e3 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+}
diff --git a/src/image/png/testdata/pngsuite/ftbbn3p08.png b/src/image/png/testdata/pngsuite/ftbbn3p08.png
new file mode 100644 (file)
index 0000000..0ede357
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbbn3p08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbbn3p08.sng b/src/image/png/testdata/pngsuite/ftbbn3p08.sng
new file mode 100644 (file)
index 0000000..429d99b
--- /dev/null
@@ -0,0 +1,292 @@
+#SNG: from ftbbn3p08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color palette;
+}
+gAMA {1.0000}
+PLTE {
+    (255,255,255)     # rgb = (0xff,0xff,0xff) grey100
+    (128, 86, 86)     # rgb = (0x80,0x56,0x56)
+    (181,181,184)     # rgb = (0xb5,0xb5,0xb8)
+    (168, 66, 66)     # rgb = (0xa8,0x42,0x42)
+    (159,159,159)     # rgb = (0x9f,0x9f,0x9f)
+    (177, 32, 32)     # rgb = (0xb1,0x20,0x20)
+    (139, 21, 21)     # rgb = (0x8b,0x15,0x15)
+    (157,157,157)     # rgb = (0x9d,0x9d,0x9d)
+    ( 27, 27, 89)     # rgb = (0x1b,0x1b,0x59)
+    (155,155,155)     # rgb = (0x9b,0x9b,0x9b)
+    (  0,  0,132)     # rgb = (0x00,0x00,0x84)
+    (153,153,153)     # rgb = (0x99,0x99,0x99) grey60
+    (143,167,143)     # rgb = (0x8f,0xa7,0x8f)
+    (151,151,151)     # rgb = (0x97,0x97,0x97)
+    (149,149,149)     # rgb = (0x95,0x95,0x95)
+    (147,147,147)     # rgb = (0x93,0x93,0x93)
+    ( 41, 41, 86)     # rgb = (0x29,0x29,0x56)
+    (145,145,145)     # rgb = (0x91,0x91,0x91) grey57
+    (  0,  0,155)     # rgb = (0x00,0x00,0x9b)
+    (143,143,143)     # rgb = (0x8f,0x8f,0x8f) grey56
+    (139,149,139)     # rgb = (0x8b,0x95,0x8b)
+    ( 46, 46,167)     # rgb = (0x2e,0x2e,0xa7)
+    (141,141,141)     # rgb = (0x8d,0x8d,0x8d)
+    (128,  0,  0)     # rgb = (0x80,0x00,0x00)
+    (139,139,139)     # rgb = (0x8b,0x8b,0x8b)
+    (185,  0,  0)     # rgb = (0xb9,0x00,0x00)
+    (137,137,137)     # rgb = (0x89,0x89,0x89)
+    ( 12, 12,213)     # rgb = (0x0c,0x0c,0xd5)
+    (120,117,117)     # rgb = (0x78,0x75,0x75)
+    (135,135,135)     # rgb = (0x87,0x87,0x87) grey53
+    (  0,  0,178)     # rgb = (0x00,0x00,0xb2)
+    (133,133,133)     # rgb = (0x85,0x85,0x85) grey52
+    (165,  0,  0)     # rgb = (0xa5,0x00,0x00)
+    (222,  0,  0)     # rgb = (0xde,0x00,0x00)
+    (129,129,129)     # rgb = (0x81,0x81,0x81)
+    (127,127,127)     # rgb = (0x7f,0x7f,0x7f) grey50
+    (  0,  0,158)     # rgb = (0x00,0x00,0x9e)
+    (125,125,125)     # rgb = (0x7d,0x7d,0x7d) grey49
+    (  0,  0,201)     # rgb = (0x00,0x00,0xc9)
+    (123,123,123)     # rgb = (0x7b,0x7b,0x7b)
+    (121,121,121)     # rgb = (0x79,0x79,0x79)
+    ( 55, 55, 86)     # rgb = (0x37,0x37,0x56)
+    (119,119,119)     # rgb = (0x77,0x77,0x77)
+    (117,117,117)     # rgb = (0x75,0x75,0x75) grey46
+    (115,115,115)     # rgb = (0x73,0x73,0x73) grey45
+    ( 72,169, 72)     # rgb = (0x48,0xa9,0x48)
+    (142,  0,  0)     # rgb = (0x8e,0x00,0x00)
+    (  2,  2,100)     # rgb = (0x02,0x02,0x64)
+    (  0,  0, 98)     # rgb = (0x00,0x00,0x62)
+    ( 86,137, 86)     # rgb = (0x56,0x89,0x56)
+    ( 40, 40,124)     # rgb = (0x28,0x28,0x7c)
+    ( 83,139, 83)     # rgb = (0x53,0x8b,0x53)
+    (137,137,143)     # rgb = (0x89,0x89,0x8f)
+    (103,103,103)     # rgb = (0x67,0x67,0x67)
+    (101,101,101)     # rgb = (0x65,0x65,0x65)
+    ( 93,109, 93)     # rgb = (0x5d,0x6d,0x5d)
+    ( 19,229, 19)     # rgb = (0x13,0xe5,0x13)
+    (134, 38, 38)     # rgb = (0x86,0x26,0x26)
+    (111, 45, 45)     # rgb = (0x6f,0x2d,0x2d)
+    ( 68,145, 68)     # rgb = (0x44,0x91,0x44)
+    ( 97, 97, 97)     # rgb = (0x61,0x61,0x61) grey38
+    ( 59,157, 59)     # rgb = (0x3b,0x9d,0x3b)
+    ( 68,137, 68)     # rgb = (0x44,0x89,0x44)
+    ( 61,147, 61)     # rgb = (0x3d,0x93,0x3d)
+    (  0,  0,164)     # rgb = (0x00,0x00,0xa4)
+    (  0,243,  0)     # rgb = (0x00,0xf3,0x00)
+    (  0,241,  0)     # rgb = (0x00,0xf1,0x00)
+    ( 89, 89, 89)     # rgb = (0x59,0x59,0x59) grey35
+    ( 87, 87, 87)     # rgb = (0x57,0x57,0x57) grey34
+    ( 85, 85, 85)     # rgb = (0x55,0x55,0x55)
+    ( 83, 83, 83)     # rgb = (0x53,0x53,0x53)
+    ( 52,133, 52)     # rgb = (0x34,0x85,0x34)
+    ( 81, 81, 81)     # rgb = (0x51,0x51,0x51)
+    ( 36,151, 36)     # rgb = (0x24,0x97,0x24)
+    ( 79, 79, 79)     # rgb = (0x4f,0x4f,0x4f) grey31
+    ( 58, 58, 65)     # rgb = (0x3a,0x3a,0x41)
+    ( 16, 16,186)     # rgb = (0x10,0x10,0xba)
+    (178, 15, 15)     # rgb = (0xb2,0x0f,0x0f)
+    (  0,199,  0)     # rgb = (0x00,0xc7,0x00)
+    (  0,197,  0)     # rgb = (0x00,0xc5,0x00)
+    (252,252,252)     # rgb = (0xfc,0xfc,0xfc) grey99
+    (  0,195,  0)     # rgb = (0x00,0xc3,0x00)
+    (  4,  4,151)     # rgb = (0x04,0x04,0x97)
+    (  0,193,  0)     # rgb = (0x00,0xc1,0x00)
+    ( 45,119, 45)     # rgb = (0x2d,0x77,0x2d)
+    (250,250,250)     # rgb = (0xfa,0xfa,0xfa) grey98
+    (  0,191,  0)     # rgb = (0x00,0xbf,0x00)
+    (  0,  0,104)     # rgb = (0x00,0x00,0x68)
+    (  0,189,  0)     # rgb = (0x00,0xbd,0x00)
+    (218,212,212)     # rgb = (0xda,0xd4,0xd4)
+    ( 16, 16,123)     # rgb = (0x10,0x10,0x7b)
+    (  9,173,  9)     # rgb = (0x09,0xad,0x09)
+    (248,248,248)     # rgb = (0xf8,0xf8,0xf8)
+    (  0,185,  0)     # rgb = (0x00,0xb9,0x00)
+    (  0,183,  0)     # rgb = (0x00,0xb7,0x00)
+    (156,156,161)     # rgb = (0x9c,0x9c,0xa1)
+    (246,246,246)     # rgb = (0xf6,0xf6,0xf6)
+    ( 12,161, 12)     # rgb = (0x0c,0xa1,0x0c)
+    (  0,179,  0)     # rgb = (0x00,0xb3,0x00)
+    (  0,177,  0)     # rgb = (0x00,0xb1,0x00)
+    ( 16,145, 16)     # rgb = (0x10,0x91,0x10)
+    (  0,171,  0)     # rgb = (0x00,0xab,0x00)
+    (242,242,242)     # rgb = (0xf2,0xf2,0xf2) grey95
+    (  0,169,  0)     # rgb = (0x00,0xa9,0x00)
+    (  0,167,  0)     # rgb = (0x00,0xa7,0x00)
+    (238,238,238)     # rgb = (0xee,0xee,0xee)
+    (236,236,236)     # rgb = (0xec,0xec,0xec)
+    (  0,151,  0)     # rgb = (0x00,0x97,0x00)
+    (234,234,234)     # rgb = (0xea,0xea,0xea)
+    (  0,  0,107)     # rgb = (0x00,0x00,0x6b)
+    (  0,141,  0)     # rgb = (0x00,0x8d,0x00)
+    (  0,139,  0)     # rgb = (0x00,0x8b,0x00) green4
+    (  0,137,  0)     # rgb = (0x00,0x89,0x00)
+    (  0,135,  0)     # rgb = (0x00,0x87,0x00)
+    ( 49, 49, 49)     # rgb = (0x31,0x31,0x31)
+    ( 25, 25, 42)     # rgb = (0x19,0x19,0x2a)
+    (  7,  7, 64)     # rgb = (0x07,0x07,0x40)
+    ( 18, 18,174)     # rgb = (0x12,0x12,0xae)
+    (  9,  9,238)     # rgb = (0x09,0x09,0xee)
+    (211,214,211)     # rgb = (0xd3,0xd6,0xd3)
+    (204,204,204)     # rgb = (0xcc,0xcc,0xcc) grey80
+    (147,  0,  0)     # rgb = (0x93,0x00,0x00)
+    (163, 42, 42)     # rgb = (0xa3,0x2a,0x2a)
+    (198,198,198)     # rgb = (0xc6,0xc6,0xc6)
+    (196,196,196)     # rgb = (0xc4,0xc4,0xc4) grey77
+    (204,  0,  0)     # rgb = (0xcc,0x00,0x00)
+    (211, 10, 10)     # rgb = (0xd3,0x0a,0x0a)
+    (129,107,107)     # rgb = (0x81,0x6b,0x6b)
+    (120, 62, 62)     # rgb = (0x78,0x3e,0x3e)
+    (  3,  3,109)     # rgb = (0x03,0x03,0x6d)
+    (  0,  0,159)     # rgb = (0x00,0x00,0x9f)
+    ( 10, 10, 86)     # rgb = (0x0a,0x0a,0x56)
+    ( 70, 70, 72)     # rgb = (0x46,0x46,0x48)
+    ( 65, 65, 77)     # rgb = (0x41,0x41,0x4d)
+    (115, 93, 93)     # rgb = (0x73,0x5d,0x5d)
+    ( 81,  7,  7)     # rgb = (0x51,0x07,0x07)
+    (168,168,168)     # rgb = (0xa8,0xa8,0xa8) grey66
+    (237,237,239)     # rgb = (0xed,0xed,0xef)
+    (160,160,160)     # rgb = (0xa0,0xa0,0xa0)
+    (158,158,158)     # rgb = (0x9e,0x9e,0x9e) grey62
+    (156,156,156)     # rgb = (0x9c,0x9c,0x9c) grey61
+    (  0,  0,185)     # rgb = (0x00,0x00,0xb9)
+    (154,154,154)     # rgb = (0x9a,0x9a,0x9a)
+    (178,  0,  0)     # rgb = (0xb2,0x00,0x00)
+    (152,152,152)     # rgb = (0x98,0x98,0x98)
+    (235,  0,  0)     # rgb = (0xeb,0x00,0x00)
+    (150,150,150)     # rgb = (0x96,0x96,0x96) grey59
+    (158,  0,  0)     # rgb = (0x9e,0x00,0x00)
+    (148,148,148)     # rgb = (0x94,0x94,0x94) grey58
+    ( 19, 19, 28)     # rgb = (0x13,0x13,0x1c)
+    (146,146,146)     # rgb = (0x92,0x92,0x92)
+    (144,144,144)     # rgb = (0x90,0x90,0x90)
+    (142,142,142)     # rgb = (0x8e,0x8e,0x8e)
+    (  0,  0,145)     # rgb = (0x00,0x00,0x91)
+    (138,138,138)     # rgb = (0x8a,0x8a,0x8a) grey54
+    (136,136,136)     # rgb = (0x88,0x88,0x88)
+    (118,162,118)     # rgb = (0x76,0xa2,0x76)
+    (133,136,133)     # rgb = (0x85,0x88,0x85)
+    (134,134,134)     # rgb = (0x86,0x86,0x86)
+    (132,132,132)     # rgb = (0x84,0x84,0x84)
+    (120, 15, 15)     # rgb = (0x78,0x0f,0x0f)
+    (130,130,130)     # rgb = (0x82,0x82,0x82) grey51
+    (126,130,126)     # rgb = (0x7e,0x82,0x7e)
+    (126,126,126)     # rgb = (0x7e,0x7e,0x7e)
+    (124,124,124)     # rgb = (0x7c,0x7c,0x7c)
+    (122,122,122)     # rgb = (0x7a,0x7a,0x7a) grey48
+    ( 74,192, 74)     # rgb = (0x4a,0xc0,0x4a)
+    (118,118,118)     # rgb = (0x76,0x76,0x76)
+    (116,116,116)     # rgb = (0x74,0x74,0x74)
+    (114,114,114)     # rgb = (0x72,0x72,0x72)
+    (112,112,112)     # rgb = (0x70,0x70,0x70) grey44
+    (152,  0,  0)     # rgb = (0x98,0x00,0x00)
+    (110,110,110)     # rgb = (0x6e,0x6e,0x6e) grey43
+    (106,112,106)     # rgb = (0x6a,0x70,0x6a)
+    (122,102,102)     # rgb = (0x7a,0x66,0x66)
+    (106,106,106)     # rgb = (0x6a,0x6a,0x6a)
+    (132,  0,  0)     # rgb = (0x84,0x00,0x00)
+    ( 68,162, 68)     # rgb = (0x44,0xa2,0x44)
+    ( 75,150, 75)     # rgb = (0x4b,0x96,0x4b)
+    ( 97,100, 97)     # rgb = (0x61,0x64,0x61)
+    ( 98, 98, 98)     # rgb = (0x62,0x62,0x62)
+    (  0,244,  0)     # rgb = (0x00,0xf4,0x00)
+    ( 56,152, 56)     # rgb = (0x38,0x98,0x38)
+    ( 92, 92, 92)     # rgb = (0x5c,0x5c,0x5c) grey36
+    ( 90, 90, 90)     # rgb = (0x5a,0x5a,0x5a)
+    (  0,230,  0)     # rgb = (0x00,0xe6,0x00)
+    (  2,  2, 93)     # rgb = (0x02,0x02,0x5d)
+    ( 66,120, 66)     # rgb = (0x42,0x78,0x42)
+    ( 86, 86, 86)     # rgb = (0x56,0x56,0x56)
+    (  0,  0,240)     # rgb = (0x00,0x00,0xf0)
+    ( 46,148, 46)     # rgb = (0x2e,0x94,0x2e)
+    ( 71,104, 71)     # rgb = (0x47,0x68,0x47)
+    ( 49, 49, 96)     # rgb = (0x31,0x31,0x60)
+    (  0,216,  0)     # rgb = (0x00,0xd8,0x00)
+    ( 82, 82, 82)     # rgb = (0x52,0x52,0x52) grey32
+    ( 80, 80, 80)     # rgb = (0x50,0x50,0x50)
+    (  0,206,  0)     # rgb = (0x00,0xce,0x00)
+    ( 33,152, 33)     # rgb = (0x21,0x98,0x21)
+    ( 20, 20,109)     # rgb = (0x14,0x14,0x6d)
+    (  0,200,  0)     # rgb = (0x00,0xc8,0x00)
+    ( 76, 76, 76)     # rgb = (0x4c,0x4c,0x4c)
+    (253,253,253)     # rgb = (0xfd,0xfd,0xfd)
+    (  0,198,  0)     # rgb = (0x00,0xc6,0x00)
+    (  0,  0,157)     # rgb = (0x00,0x00,0x9d)
+    (111,107,107)     # rgb = (0x6f,0x6b,0x6b)
+    (234, 14, 14)     # rgb = (0xea,0x0e,0x0e)
+    ( 72, 72, 72)     # rgb = (0x48,0x48,0x48)
+    (  0,188,  0)     # rgb = (0x00,0xbc,0x00)
+    ( 52,102, 52)     # rgb = (0x34,0x66,0x34)
+    (  2,  2,245)     # rgb = (0x02,0x02,0xf5)
+    ( 83, 83, 96)     # rgb = (0x53,0x53,0x60)
+    (  0,176,  0)     # rgb = (0x00,0xb0,0x00)
+    (  0,174,  0)     # rgb = (0x00,0xae,0x00)
+    (183,  0,  0)     # rgb = (0xb7,0x00,0x00)
+    (  0,164,  0)     # rgb = (0x00,0xa4,0x00)
+    (239,239,239)     # rgb = (0xef,0xef,0xef)
+    (  0,162,  0)     # rgb = (0x00,0xa2,0x00)
+    (143, 79, 79)     # rgb = (0x8f,0x4f,0x4f)
+    (149, 52, 52)     # rgb = (0x95,0x34,0x34)
+    (  0,152,  0)     # rgb = (0x00,0x98,0x00)
+    (  0,150,  0)     # rgb = (0x00,0x96,0x00)
+    (  0,146,  0)     # rgb = (0x00,0x92,0x00)
+    (231,231,231)     # rgb = (0xe7,0xe7,0xe7)
+    (  0,140,  0)     # rgb = (0x00,0x8c,0x00)
+    (227,227,227)     # rgb = (0xe3,0xe3,0xe3) grey89
+    (  0,128,  0)     # rgb = (0x00,0x80,0x00)
+    (146,  6,  6)     # rgb = (0x92,0x06,0x06)
+    (  1,  1,111)     # rgb = (0x01,0x01,0x6f)
+    (100, 86, 89)     # rgb = (0x64,0x56,0x59)
+    (  0,  0,100)     # rgb = (0x00,0x00,0x64)
+    ( 78, 78,107)     # rgb = (0x4e,0x4e,0x6b)
+    (207,207,207)     # rgb = (0xcf,0xcf,0xcf) grey81
+    (221,221,224)     # rgb = (0xdd,0xdd,0xe0)
+    (  0,  0,123)     # rgb = (0x00,0x00,0x7b)
+    (201,201,201)     # rgb = (0xc9,0xc9,0xc9) grey79
+    ( 22, 22, 65)     # rgb = (0x16,0x16,0x41)
+    ( 33, 33, 89)     # rgb = (0x21,0x21,0x59)
+    ( 87, 87, 89)     # rgb = (0x57,0x57,0x59)
+    ( 68, 68,120)     # rgb = (0x44,0x44,0x78)
+    (191,191,191)     # rgb = (0xbf,0xbf,0xbf) grey75
+    (235,221,221)     # rgb = (0xeb,0xdd,0xdd)
+    ( 45, 45, 84)     # rgb = (0x2d,0x2d,0x54)
+    ( 10, 10, 96)     # rgb = (0x0a,0x0a,0x60)
+    (  0,  0,255)     # rgb = (0x00,0x00,0xff) blue1
+    (191,125,125)     # rgb = (0xbf,0x7d,0x7d)
+    (  0,  0,  0)     # rgb = (0x00,0x00,0x00) grey0
+}
+bKGD {index: 245}
+tRNS {
+ 0}
+IMAGE {
+    pixels hex
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000e0ea66000000000000000000000000000000
+0000000000000000000000de02a336e43903f4f0000000000000000000000000
+000000000000000069ef1a358680062eb017b0ab7af459500000000000000000
+0000000000667c0ea9cc803979937917a03a878787b0e2ae8ae75c0000000000
+00005cea8ea72c8639e293208f7d7d19200639a017ab2ee4ac2ca7097c690000
+00007823a72b2bda198fd54ddad90521219191217d1917cc2b2b2b2baf8e0000
+0000e81f9b9f27014d05d91c2a2a2a7f037ecdcd7e7a012a2a2aaab7c2ef0000
+00006c9f229d981a23282828282828282828282828282828a7b445c3c8de0000
+00005ca249d63d140f139f272727272727272727a5a528af44c3c8ce43000000
+0000009a62ca41a6960e0d941da4a4a4a4a4a4a4a4a9b732525a1084a1000000
+000000965b58b53811940d0b090b1823a3a3252ab4d24c269957571088000000
+000000946162b9b59c0f14b12d0c8b8c98a3afb8ed1bbd82ba74300877000000
+00000088c565c7b5a6962dcf67be07048aa5b84315f326ba7395832950000000
+00000002bed8d4b94214b1c7dbb68c8b04a843e6d1bd814bceeb10a900000000
+0000007b47636ec441b23d4edb3f09078bac4315f340ec855a82995f00000000
+00000059bb63e15d42643dca6b3f8e090735ed76bd81c05224e9f27b00000000
+0000006cbbd47161c1684951dc3f908e8c3ceef38d08ebe96d6d086000000000
+00000050bf67dc54534fdd53ddb20d0b8eb815d10af1732fe312e60000000000
+00000000add6d6bf61c16f566eb20e0d924475bd578572c61e6d340000000000
+0000000016d8d3d03ec76bcfdf3b0f0e13bc4c8d2f84c040cb837b0000000000
+00000000550c47b3365bd45d6f33110f1a4575cbf2c0521e0802000000000000
+000000000000e7ac36be625e7031131122455a0a2f0a99c6e700000000000000
+000000000000006a9e37d36270331613a545f181e53032e80000000000000000
+00000000000000005088c5d371311816a8464b7374ee89000000000000000000
+0000000000000000000077b654a29b18acc24a722a5500000000000000000000
+0000000000000000000000d78a9f9e9b3548c38ac90000000000000000000000
+00000000000000000000000000ef1f9e3cc20200000000000000000000000000
+0000000000000000000000000000e89736780000000000000000000000000000
+00000000000000000000000000000060e0000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+}
diff --git a/src/image/png/testdata/pngsuite/ftbgn2c16.png b/src/image/png/testdata/pngsuite/ftbgn2c16.png
new file mode 100644 (file)
index 0000000..85cec39
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbgn2c16.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbgn2c16.sng b/src/image/png/testdata/pngsuite/ftbgn2c16.sng
new file mode 100644 (file)
index 0000000..0f5621d
--- /dev/null
@@ -0,0 +1,45 @@
+#SNG: from ftbgn2c16.png
+IHDR {
+    width: 32; height: 32; bitdepth: 16;
+    using color;
+}
+gAMA {1.0000}
+bKGD {red: 0;  green: 65535;  blue: 0;}
+tRNS {
+    red: 65535; green: 65535; blue: 65535;
+}
+IMAGE {
+    pixels hex
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff e3e3e3e3e3e3 c9c9c9c9c9c9 f1f1f1f1f1f1 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff e8e8e8e8e8e8 b5b5b5b5b5b5 7e7e7e7e7e7e 656565656565 6e6e52525252 7e7e2e2e2e2e a6a643434343 c7c790909090 ebebdddddddd ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff eeeeeeeeeeee bfbfbfbfbfbf 898989898989 676767676767 6b6b5d5d5d5d 7a7a39393939 8a8a12121212 8d8d00010000 858500000000 777700000000 848400000000 9a9a01010101 a2a22d2d2d2d bfbf7d7d7d7d ddddd0d0d0d0 fcfcfcfcfcfc ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff f2f2f2f2f2f2 c4c4c4c4c4c4 959595959595 727272727272 6f6f6b6b6b6b 777744444444 87871e1e1e1e 959501010101 9f9f00010000 919100000000 808000010000 72720c0c0c0c 61612d2d2d2d 53530e0e0e0e 505000000000 595900010000 858500000000 929206060606 7a7a66666666 a0a0a0a0a0a0 cfcfcfcfcfcf f8f8f8f8f8f8 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff f7f7f7f7f7f7 cacacacacaca 9a9a9a9a9a9a 767676767676 737373737373 7c7c5d5d5d5d 87872e2e2e2e 939307070707 9e9e00010000 a9a900000000 b0b000000000 c9c900000000 cfcf00000000 b9b900010000 a2a201010101 8c8c19191919 85852a2a2a2a 7f7f13131313 818100010000 969600000000 8f8f00000000 6b6b53535353 6e6e6e6e6e6e 737373737373 767676767676 9b9b9b9b9b9b c4c4c4c4c4c4 eeeeeeeeeeee ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff cccccccccccc 7f7f7f7f7f7f 767676767676 757575757575 757575757575 96962f2f2f2f b8b800010000 b4b400000000 b6b600010000 adad0c0c0c0c 94943a3a3a3a 929250505050 b9b923232323 d6d602020202 e2e200010000 efef00000000 e7e700000000 dada00000000 cfcf00010000 baba00000000 7d7d01010101 6f6f6b6b6b6b 757575757575 757575757575 757575757575 757575757575 6a6a6a6a6a6a 9a9a9a9a9a9a ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff dcdcdcdcdcdc 858585858585 888888888888 848484848484 7b7b7b7b7b7b 858554545454 b7b713131313 a9a91d1d1d1d 8d8d4f4f4f4f 787875757575 777777777777 777777777777 777777777777 81816b6b6b6b aaaa41414141 d6d620202020 ecec10101010 e9e90c0c0c0c d0d012121212 a5a528282828 7b7b58585858 777777777777 777777777777 777777777777 707070707070 5c5c5c5c5c5c 525252525252 bdbdbdbdbdbd ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff eaeaeaeaeaea 848484848484 818181818181 858588888585 8e8e8e8e8e8e 898989898989 7f7f7f7f7f7f 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 797979797979 767676767676 636363636363 545454545454 505050505050 4c4c4c4c4c4c e6e6e6e6e6e6 ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff f8f8f8f8f8f8 7f7f84847f7f 252597972525 0404a5a50404 3939a4a43939 8b8b94948b8b 939393939393 8f8f8f8f8f8f 838383838383 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7b7b7b7b7b7b 7a7a7a7a7a7a 7a7a7a7a7a7a 797979797979 6a6a6a6a6a6a 575757575757 505050505050 4c4c4c4c4c4c 494949494949 595959595959 ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff 8a8a8a8a8a8a 0101b3b30101 0000c6c60001 0000f2f20000 5959b6b65959 929292929292 959595959595 979797979797 949494949494 878787878787 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 7c7c7c7c7c7c 717171717171 5a5a5a5a6060 282828288585 040404049393 0c0c0c0c7878 282828285858 464646464a4a 828282828282 ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff 929292929292 0c0cabab0c0c 0000bdbd0001 0000f4f40000 2020dddd2020 919191919191 949494949494 979797979797 999999999999 9b9b9b9b9b9b 999999999999 8b8b8b8b8b8b 7f7f7f7f7f7f 7e7e7e7e7e7e 7e7e7e7e7e7e 7d7d7d7d7d7d 777777777777 626262626262 535353536060 12121212bebe 00010000cccc 000000009292 000000016969 000000006767 2a2a2a2a5555 acacacacacac ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff 949494949494 1616a1a11616 0000b4b40001 0000e2e20000 0000f4f40000 7676a2a27676 939393939393 8d8d97978d8d 46469e9e4646 4646a7a74646 8e8e9e9e8e8e 9e9e9e9e9e9e 9c9c9c9c9c9c 8e8e8e8e8e8e 7e7e7e7e7e7e 6a6a6a6a6a6a 5a5a5a5a5a5a 575757575a5a 18181818cdcd 00010000f0f0 00000000a0a0 020202026060 010101013d3d 000100006161 1d1d1d1d5959 d6d6d6d6d6d6 ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff a4a4a4a4a4a4 212198982121 0000aaaa0001 0000c8c80000 0000f4f40000 3b3bcaca3b3b 929292929292 4a4aacac4a4a 0001bcbc0000 0000a9a90000 2f2f9a9a2f2f 9d9d9d9d9d9d 9f9f9f9f9f9f a0a0a0a0a0a0 7a7a7a7a7a7a 5a5a5a5a5a5a 595959595959 31313131a1a1 00010000ffff 00000000c6c6 030303035b5b 191919192424 0c0c0c0c1515 0c0c0c0c5555 3b3b3b3b5353 fbfbfbfbfbfb ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff b6b6b6b6b6b6 2b2b8f8f2b2b 0000a2a20001 0000adad0000 0000ebeb0000 0707eded0707 898995958989 4343a7a74343 0001c9c90000 000099990000 383895953838 9c9c9c9c9c9c 9e9e9e9e9e9e 9f9f9f9f9f9f 747474747474 595959595959 505050506767 05050505f5f5 00010000f0f0 030303037070 383838384646 484848484848 161616163939 2b2b2b2b5555 727272727272 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff c7c7c7c7c7c7 343486863434 0000b1b10001 00008d8d0000 0000d2d20000 0000f3f30000 4c4c9b9b4c4c 3b3b9e9e3b3b 0001c7c70000 000098980000 3d3d94943d3d 9b9b9b9b9b9b 9d9d9d9d9d9d 9e9e9e9e9e9e 6e6e6e6e6e6e 595959595959 2b2b2b2badad 00000001ffff 00000000a6a6 252525255959 434343434f4f 161616167e7e 000000019f9f 010101018e8e 9c9c9c9ca1a1 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff d8d8d8d8d8d8 3e3e7d7d3e3e 0000b1b10001 00007b7b0000 0000b8b80000 0000f1f10000 17178b8b1717 3b3b9c9c3b3b 0001c6c60000 000097970000 3d3d93933d3d 9a9a9a9a9a9a 9b9b9b9b9b9b 9d9d9d9d9d9d 676767676767 575757575959 09090909eeee 00000001f0f0 040404046b6b 333333335a5a 070707079090 000000009e9e 000000017c7c 0d0d0d0d5d5d c7c7c7c7c7c7 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff eaeaeaeaeaea 474774744747 0000adad0001 000085850000 090998980909 0000dcdc0000 0000a7a70000 232398982323 0001c3c30000 000096960000 3f3f92923f3f 989898989898 9a9a9a9a9a9a 9c9c9c9c9c9c 616161616161 424242427f7f 00010000ffff 00000001b9b9 1a1a1a1a5d5d 161616164949 000000007b7b 000000006b6b 000000016b6b 1c1c1c1c5656 f4f4f4f4f4f4 ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff fcfcfcfcfcfc 50506c6c5050 0000a9a90001 000095950000 2d2d77772d2d 0000c1c10000 0000c5c50000 010193930101 0001c1c10000 000090900000 4b4b91914b4b 979797979797 999999999999 9a9a9a9a9a9a 5a5a5a5a5a5a 2b2b2b2ba4a4 00010000f6f6 000000018686 2f2f2f2f5353 191919193030 020202026363 000000007373 000000019b9b 4d4d4d4d7070 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff 686873736868 0000a4a40001 0000a4a40000 3e3e65653e3e 1414a5a51414 0000d4d40000 00008b8b0001 0000bfbf0000 00008e8e0000 4a4a90904a4a 959595959595 979797979797 969696969696 575757575757 1a1a1a1ab5b5 00010000dede 000000016868 3f3f3f3f4b4b 2b2b2b2b2b2b 0c0c0c0c6d6d 00000000b3b3 000000016b6b 868686869292 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff 8c8c8c8c8c8c 05059e9e0505 0001b0b00000 343466663434 404085854040 0000caca0000 000097970001 0000bcbc0000 00008c8c0000 49498e8e4949 939393939393 959595959595 8f8f8f8f8f8f 565656565656 0f0f0f0fb7b7 00010000b9b9 030303036666 474747474747 2f2f2f2f6464 00010000a2a2 000000009d9d 090909095858 c5c5c5c5c5c5 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff fafafafafafa 9090b0b09090 343485853434 616164646161 63636a6a6363 0606afaf0606 0000aeae0001 0000b9b90000 00008b8b0000 53538d8d5353 919191919191 939393939393 898989898989 555555555555 0a0a0a0aa8a8 000100009d9d 070707076363 343434345c5c 040404049b9b 00010000b1b1 1a1a1a1a4d4d b5b5b5b5bbbb ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff d0d0d0d0d0d0 6d6d6d6d6d6d 656565656565 2d2d8f8f2d2d 0000b2b20001 0000b6b60000 000089890000 55558b8b5555 8f8f8f8f8f8f 919191919191 818181818181 555555555555 151515157e7e 000100008484 010101016565 010101018484 000100009191 1c1c1c1c6e6e cecececed0d0 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ecececececec 868686868686 585870705858 0000afaf0001 0000b3b30000 000088880000 535389895353 8d8d8d8d8d8d 8f8f8f8f8f8f 7a7a7a7a7a7a 545454545454 2c2c2c2c4949 020202026b6b 000000016464 000000006363 292929297474 dfdfdfdfe5e5 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff fcfcfcfcfcfc aaaaaaaaaaaa 212198982121 0001b0b00000 000086860000 575787875757 8b8b8b8b8b8b 8d8d8d8d8d8d 747474747474 535353535353 3d3d3d3d3d3d 1a1a1a1a2323 0d0d0d0d4343 474747477272 ededededefef ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff d1d1d6d6d1d1 38389b9b3838 2d2d77772d2d 7d7d81817d7d 888888888888 8b8b8b8b8b8b 6d6d6d6d6d6d 525252525252 4f4f4f4f4f4f 373737373737 777777777777 fafafafafafa ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff efefefefefef a0a0a0a0a0a0 838383838383 868686868686 888888888888 676767676767 515151515151 505050505050 a0a0a0a0a0a0 fdfdfdfdfdfd ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff fefefefefefe c0c0c0c0c0c0 858585858585 868686868686 616161616161 525252525252 b7b7b7b7b7b7 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff dededededede 909090909090 656565656565 cccccccccccc ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff f5f5f5f5f5f5 e3e3e3e3e3e3 ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff ffffffffffff 
+}
diff --git a/src/image/png/testdata/pngsuite/ftbgn3p08.png b/src/image/png/testdata/pngsuite/ftbgn3p08.png
new file mode 100644 (file)
index 0000000..8cf2e6f
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbgn3p08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbgn3p08.sng b/src/image/png/testdata/pngsuite/ftbgn3p08.sng
new file mode 100644 (file)
index 0000000..0e3b7bd
--- /dev/null
@@ -0,0 +1,292 @@
+#SNG: from ftbgn3p08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color palette;
+}
+gAMA {1.0000}
+PLTE {
+    (255,255,255)     # rgb = (0xff,0xff,0xff) grey100
+    (128, 86, 86)     # rgb = (0x80,0x56,0x56)
+    (181,181,184)     # rgb = (0xb5,0xb5,0xb8)
+    (168, 66, 66)     # rgb = (0xa8,0x42,0x42)
+    (159,159,159)     # rgb = (0x9f,0x9f,0x9f)
+    (177, 32, 32)     # rgb = (0xb1,0x20,0x20)
+    (139, 21, 21)     # rgb = (0x8b,0x15,0x15)
+    (157,157,157)     # rgb = (0x9d,0x9d,0x9d)
+    ( 27, 27, 89)     # rgb = (0x1b,0x1b,0x59)
+    (155,155,155)     # rgb = (0x9b,0x9b,0x9b)
+    (  0,  0,132)     # rgb = (0x00,0x00,0x84)
+    (153,153,153)     # rgb = (0x99,0x99,0x99) grey60
+    (143,167,143)     # rgb = (0x8f,0xa7,0x8f)
+    (151,151,151)     # rgb = (0x97,0x97,0x97)
+    (149,149,149)     # rgb = (0x95,0x95,0x95)
+    (147,147,147)     # rgb = (0x93,0x93,0x93)
+    ( 41, 41, 86)     # rgb = (0x29,0x29,0x56)
+    (145,145,145)     # rgb = (0x91,0x91,0x91) grey57
+    (  0,  0,155)     # rgb = (0x00,0x00,0x9b)
+    (143,143,143)     # rgb = (0x8f,0x8f,0x8f) grey56
+    (139,149,139)     # rgb = (0x8b,0x95,0x8b)
+    ( 46, 46,167)     # rgb = (0x2e,0x2e,0xa7)
+    (141,141,141)     # rgb = (0x8d,0x8d,0x8d)
+    (128,  0,  0)     # rgb = (0x80,0x00,0x00)
+    (139,139,139)     # rgb = (0x8b,0x8b,0x8b)
+    (185,  0,  0)     # rgb = (0xb9,0x00,0x00)
+    (137,137,137)     # rgb = (0x89,0x89,0x89)
+    ( 12, 12,213)     # rgb = (0x0c,0x0c,0xd5)
+    (120,117,117)     # rgb = (0x78,0x75,0x75)
+    (135,135,135)     # rgb = (0x87,0x87,0x87) grey53
+    (  0,  0,178)     # rgb = (0x00,0x00,0xb2)
+    (133,133,133)     # rgb = (0x85,0x85,0x85) grey52
+    (165,  0,  0)     # rgb = (0xa5,0x00,0x00)
+    (222,  0,  0)     # rgb = (0xde,0x00,0x00)
+    (129,129,129)     # rgb = (0x81,0x81,0x81)
+    (127,127,127)     # rgb = (0x7f,0x7f,0x7f) grey50
+    (  0,  0,158)     # rgb = (0x00,0x00,0x9e)
+    (125,125,125)     # rgb = (0x7d,0x7d,0x7d) grey49
+    (  0,  0,201)     # rgb = (0x00,0x00,0xc9)
+    (123,123,123)     # rgb = (0x7b,0x7b,0x7b)
+    (121,121,121)     # rgb = (0x79,0x79,0x79)
+    ( 55, 55, 86)     # rgb = (0x37,0x37,0x56)
+    (119,119,119)     # rgb = (0x77,0x77,0x77)
+    (117,117,117)     # rgb = (0x75,0x75,0x75) grey46
+    (115,115,115)     # rgb = (0x73,0x73,0x73) grey45
+    ( 72,169, 72)     # rgb = (0x48,0xa9,0x48)
+    (142,  0,  0)     # rgb = (0x8e,0x00,0x00)
+    (  2,  2,100)     # rgb = (0x02,0x02,0x64)
+    (  0,  0, 98)     # rgb = (0x00,0x00,0x62)
+    ( 86,137, 86)     # rgb = (0x56,0x89,0x56)
+    ( 40, 40,124)     # rgb = (0x28,0x28,0x7c)
+    ( 83,139, 83)     # rgb = (0x53,0x8b,0x53)
+    (137,137,143)     # rgb = (0x89,0x89,0x8f)
+    (103,103,103)     # rgb = (0x67,0x67,0x67)
+    (101,101,101)     # rgb = (0x65,0x65,0x65)
+    ( 93,109, 93)     # rgb = (0x5d,0x6d,0x5d)
+    ( 19,229, 19)     # rgb = (0x13,0xe5,0x13)
+    (134, 38, 38)     # rgb = (0x86,0x26,0x26)
+    (111, 45, 45)     # rgb = (0x6f,0x2d,0x2d)
+    ( 68,145, 68)     # rgb = (0x44,0x91,0x44)
+    ( 97, 97, 97)     # rgb = (0x61,0x61,0x61) grey38
+    ( 59,157, 59)     # rgb = (0x3b,0x9d,0x3b)
+    ( 68,137, 68)     # rgb = (0x44,0x89,0x44)
+    ( 61,147, 61)     # rgb = (0x3d,0x93,0x3d)
+    (  0,  0,164)     # rgb = (0x00,0x00,0xa4)
+    (  0,243,  0)     # rgb = (0x00,0xf3,0x00)
+    (  0,241,  0)     # rgb = (0x00,0xf1,0x00)
+    ( 89, 89, 89)     # rgb = (0x59,0x59,0x59) grey35
+    ( 87, 87, 87)     # rgb = (0x57,0x57,0x57) grey34
+    ( 85, 85, 85)     # rgb = (0x55,0x55,0x55)
+    ( 83, 83, 83)     # rgb = (0x53,0x53,0x53)
+    ( 52,133, 52)     # rgb = (0x34,0x85,0x34)
+    ( 81, 81, 81)     # rgb = (0x51,0x51,0x51)
+    ( 36,151, 36)     # rgb = (0x24,0x97,0x24)
+    ( 79, 79, 79)     # rgb = (0x4f,0x4f,0x4f) grey31
+    ( 58, 58, 65)     # rgb = (0x3a,0x3a,0x41)
+    ( 16, 16,186)     # rgb = (0x10,0x10,0xba)
+    (178, 15, 15)     # rgb = (0xb2,0x0f,0x0f)
+    (  0,199,  0)     # rgb = (0x00,0xc7,0x00)
+    (  0,197,  0)     # rgb = (0x00,0xc5,0x00)
+    (252,252,252)     # rgb = (0xfc,0xfc,0xfc) grey99
+    (  0,195,  0)     # rgb = (0x00,0xc3,0x00)
+    (  4,  4,151)     # rgb = (0x04,0x04,0x97)
+    (  0,193,  0)     # rgb = (0x00,0xc1,0x00)
+    ( 45,119, 45)     # rgb = (0x2d,0x77,0x2d)
+    (250,250,250)     # rgb = (0xfa,0xfa,0xfa) grey98
+    (  0,191,  0)     # rgb = (0x00,0xbf,0x00)
+    (  0,  0,104)     # rgb = (0x00,0x00,0x68)
+    (  0,189,  0)     # rgb = (0x00,0xbd,0x00)
+    (218,212,212)     # rgb = (0xda,0xd4,0xd4)
+    ( 16, 16,123)     # rgb = (0x10,0x10,0x7b)
+    (  9,173,  9)     # rgb = (0x09,0xad,0x09)
+    (248,248,248)     # rgb = (0xf8,0xf8,0xf8)
+    (  0,185,  0)     # rgb = (0x00,0xb9,0x00)
+    (  0,183,  0)     # rgb = (0x00,0xb7,0x00)
+    (156,156,161)     # rgb = (0x9c,0x9c,0xa1)
+    (246,246,246)     # rgb = (0xf6,0xf6,0xf6)
+    ( 12,161, 12)     # rgb = (0x0c,0xa1,0x0c)
+    (  0,179,  0)     # rgb = (0x00,0xb3,0x00)
+    (  0,177,  0)     # rgb = (0x00,0xb1,0x00)
+    ( 16,145, 16)     # rgb = (0x10,0x91,0x10)
+    (  0,171,  0)     # rgb = (0x00,0xab,0x00)
+    (242,242,242)     # rgb = (0xf2,0xf2,0xf2) grey95
+    (  0,169,  0)     # rgb = (0x00,0xa9,0x00)
+    (  0,167,  0)     # rgb = (0x00,0xa7,0x00)
+    (238,238,238)     # rgb = (0xee,0xee,0xee)
+    (236,236,236)     # rgb = (0xec,0xec,0xec)
+    (  0,151,  0)     # rgb = (0x00,0x97,0x00)
+    (234,234,234)     # rgb = (0xea,0xea,0xea)
+    (  0,  0,107)     # rgb = (0x00,0x00,0x6b)
+    (  0,141,  0)     # rgb = (0x00,0x8d,0x00)
+    (  0,139,  0)     # rgb = (0x00,0x8b,0x00) green4
+    (  0,137,  0)     # rgb = (0x00,0x89,0x00)
+    (  0,135,  0)     # rgb = (0x00,0x87,0x00)
+    ( 49, 49, 49)     # rgb = (0x31,0x31,0x31)
+    ( 25, 25, 42)     # rgb = (0x19,0x19,0x2a)
+    (  7,  7, 64)     # rgb = (0x07,0x07,0x40)
+    ( 18, 18,174)     # rgb = (0x12,0x12,0xae)
+    (  9,  9,238)     # rgb = (0x09,0x09,0xee)
+    (211,214,211)     # rgb = (0xd3,0xd6,0xd3)
+    (204,204,204)     # rgb = (0xcc,0xcc,0xcc) grey80
+    (147,  0,  0)     # rgb = (0x93,0x00,0x00)
+    (163, 42, 42)     # rgb = (0xa3,0x2a,0x2a)
+    (198,198,198)     # rgb = (0xc6,0xc6,0xc6)
+    (196,196,196)     # rgb = (0xc4,0xc4,0xc4) grey77
+    (204,  0,  0)     # rgb = (0xcc,0x00,0x00)
+    (211, 10, 10)     # rgb = (0xd3,0x0a,0x0a)
+    (129,107,107)     # rgb = (0x81,0x6b,0x6b)
+    (120, 62, 62)     # rgb = (0x78,0x3e,0x3e)
+    (  3,  3,109)     # rgb = (0x03,0x03,0x6d)
+    (  0,  0,159)     # rgb = (0x00,0x00,0x9f)
+    ( 10, 10, 86)     # rgb = (0x0a,0x0a,0x56)
+    ( 70, 70, 72)     # rgb = (0x46,0x46,0x48)
+    ( 65, 65, 77)     # rgb = (0x41,0x41,0x4d)
+    (115, 93, 93)     # rgb = (0x73,0x5d,0x5d)
+    ( 81,  7,  7)     # rgb = (0x51,0x07,0x07)
+    (168,168,168)     # rgb = (0xa8,0xa8,0xa8) grey66
+    (237,237,239)     # rgb = (0xed,0xed,0xef)
+    (160,160,160)     # rgb = (0xa0,0xa0,0xa0)
+    (158,158,158)     # rgb = (0x9e,0x9e,0x9e) grey62
+    (156,156,156)     # rgb = (0x9c,0x9c,0x9c) grey61
+    (  0,  0,185)     # rgb = (0x00,0x00,0xb9)
+    (154,154,154)     # rgb = (0x9a,0x9a,0x9a)
+    (178,  0,  0)     # rgb = (0xb2,0x00,0x00)
+    (152,152,152)     # rgb = (0x98,0x98,0x98)
+    (235,  0,  0)     # rgb = (0xeb,0x00,0x00)
+    (150,150,150)     # rgb = (0x96,0x96,0x96) grey59
+    (158,  0,  0)     # rgb = (0x9e,0x00,0x00)
+    (148,148,148)     # rgb = (0x94,0x94,0x94) grey58
+    ( 19, 19, 28)     # rgb = (0x13,0x13,0x1c)
+    (146,146,146)     # rgb = (0x92,0x92,0x92)
+    (144,144,144)     # rgb = (0x90,0x90,0x90)
+    (142,142,142)     # rgb = (0x8e,0x8e,0x8e)
+    (  0,  0,145)     # rgb = (0x00,0x00,0x91)
+    (138,138,138)     # rgb = (0x8a,0x8a,0x8a) grey54
+    (136,136,136)     # rgb = (0x88,0x88,0x88)
+    (118,162,118)     # rgb = (0x76,0xa2,0x76)
+    (133,136,133)     # rgb = (0x85,0x88,0x85)
+    (134,134,134)     # rgb = (0x86,0x86,0x86)
+    (132,132,132)     # rgb = (0x84,0x84,0x84)
+    (120, 15, 15)     # rgb = (0x78,0x0f,0x0f)
+    (130,130,130)     # rgb = (0x82,0x82,0x82) grey51
+    (126,130,126)     # rgb = (0x7e,0x82,0x7e)
+    (126,126,126)     # rgb = (0x7e,0x7e,0x7e)
+    (124,124,124)     # rgb = (0x7c,0x7c,0x7c)
+    (122,122,122)     # rgb = (0x7a,0x7a,0x7a) grey48
+    ( 74,192, 74)     # rgb = (0x4a,0xc0,0x4a)
+    (118,118,118)     # rgb = (0x76,0x76,0x76)
+    (116,116,116)     # rgb = (0x74,0x74,0x74)
+    (114,114,114)     # rgb = (0x72,0x72,0x72)
+    (112,112,112)     # rgb = (0x70,0x70,0x70) grey44
+    (152,  0,  0)     # rgb = (0x98,0x00,0x00)
+    (110,110,110)     # rgb = (0x6e,0x6e,0x6e) grey43
+    (106,112,106)     # rgb = (0x6a,0x70,0x6a)
+    (122,102,102)     # rgb = (0x7a,0x66,0x66)
+    (106,106,106)     # rgb = (0x6a,0x6a,0x6a)
+    (132,  0,  0)     # rgb = (0x84,0x00,0x00)
+    ( 68,162, 68)     # rgb = (0x44,0xa2,0x44)
+    ( 75,150, 75)     # rgb = (0x4b,0x96,0x4b)
+    ( 97,100, 97)     # rgb = (0x61,0x64,0x61)
+    ( 98, 98, 98)     # rgb = (0x62,0x62,0x62)
+    (  0,244,  0)     # rgb = (0x00,0xf4,0x00)
+    ( 56,152, 56)     # rgb = (0x38,0x98,0x38)
+    ( 92, 92, 92)     # rgb = (0x5c,0x5c,0x5c) grey36
+    ( 90, 90, 90)     # rgb = (0x5a,0x5a,0x5a)
+    (  0,230,  0)     # rgb = (0x00,0xe6,0x00)
+    (  2,  2, 93)     # rgb = (0x02,0x02,0x5d)
+    ( 66,120, 66)     # rgb = (0x42,0x78,0x42)
+    ( 86, 86, 86)     # rgb = (0x56,0x56,0x56)
+    (  0,  0,240)     # rgb = (0x00,0x00,0xf0)
+    ( 46,148, 46)     # rgb = (0x2e,0x94,0x2e)
+    ( 71,104, 71)     # rgb = (0x47,0x68,0x47)
+    ( 49, 49, 96)     # rgb = (0x31,0x31,0x60)
+    (  0,216,  0)     # rgb = (0x00,0xd8,0x00)
+    ( 82, 82, 82)     # rgb = (0x52,0x52,0x52) grey32
+    ( 80, 80, 80)     # rgb = (0x50,0x50,0x50)
+    (  0,206,  0)     # rgb = (0x00,0xce,0x00)
+    ( 33,152, 33)     # rgb = (0x21,0x98,0x21)
+    ( 20, 20,109)     # rgb = (0x14,0x14,0x6d)
+    (  0,200,  0)     # rgb = (0x00,0xc8,0x00)
+    ( 76, 76, 76)     # rgb = (0x4c,0x4c,0x4c)
+    (253,253,253)     # rgb = (0xfd,0xfd,0xfd)
+    (  0,198,  0)     # rgb = (0x00,0xc6,0x00)
+    (  0,  0,157)     # rgb = (0x00,0x00,0x9d)
+    (111,107,107)     # rgb = (0x6f,0x6b,0x6b)
+    (234, 14, 14)     # rgb = (0xea,0x0e,0x0e)
+    ( 72, 72, 72)     # rgb = (0x48,0x48,0x48)
+    (  0,188,  0)     # rgb = (0x00,0xbc,0x00)
+    ( 52,102, 52)     # rgb = (0x34,0x66,0x34)
+    (  2,  2,245)     # rgb = (0x02,0x02,0xf5)
+    ( 83, 83, 96)     # rgb = (0x53,0x53,0x60)
+    (  0,176,  0)     # rgb = (0x00,0xb0,0x00)
+    (  0,174,  0)     # rgb = (0x00,0xae,0x00)
+    (183,  0,  0)     # rgb = (0xb7,0x00,0x00)
+    (  0,164,  0)     # rgb = (0x00,0xa4,0x00)
+    (239,239,239)     # rgb = (0xef,0xef,0xef)
+    (  0,162,  0)     # rgb = (0x00,0xa2,0x00)
+    (143, 79, 79)     # rgb = (0x8f,0x4f,0x4f)
+    (149, 52, 52)     # rgb = (0x95,0x34,0x34)
+    (  0,152,  0)     # rgb = (0x00,0x98,0x00)
+    (  0,150,  0)     # rgb = (0x00,0x96,0x00)
+    (  0,146,  0)     # rgb = (0x00,0x92,0x00)
+    (231,231,231)     # rgb = (0xe7,0xe7,0xe7)
+    (  0,140,  0)     # rgb = (0x00,0x8c,0x00)
+    (227,227,227)     # rgb = (0xe3,0xe3,0xe3) grey89
+    (  0,128,  0)     # rgb = (0x00,0x80,0x00)
+    (146,  6,  6)     # rgb = (0x92,0x06,0x06)
+    (  1,  1,111)     # rgb = (0x01,0x01,0x6f)
+    (100, 86, 89)     # rgb = (0x64,0x56,0x59)
+    (  0,  0,100)     # rgb = (0x00,0x00,0x64)
+    ( 78, 78,107)     # rgb = (0x4e,0x4e,0x6b)
+    (207,207,207)     # rgb = (0xcf,0xcf,0xcf) grey81
+    (221,221,224)     # rgb = (0xdd,0xdd,0xe0)
+    (  0,  0,123)     # rgb = (0x00,0x00,0x7b)
+    (201,201,201)     # rgb = (0xc9,0xc9,0xc9) grey79
+    ( 22, 22, 65)     # rgb = (0x16,0x16,0x41)
+    ( 33, 33, 89)     # rgb = (0x21,0x21,0x59)
+    ( 87, 87, 89)     # rgb = (0x57,0x57,0x59)
+    ( 68, 68,120)     # rgb = (0x44,0x44,0x78)
+    (191,191,191)     # rgb = (0xbf,0xbf,0xbf) grey75
+    (235,221,221)     # rgb = (0xeb,0xdd,0xdd)
+    ( 45, 45, 84)     # rgb = (0x2d,0x2d,0x54)
+    ( 10, 10, 96)     # rgb = (0x0a,0x0a,0x60)
+    (  0,  0,255)     # rgb = (0x00,0x00,0xff) blue1
+    (191,125,125)     # rgb = (0xbf,0x7d,0x7d)
+    (170,170,170)     # rgb = (0xaa,0xaa,0xaa)
+}
+bKGD {index: 245}
+tRNS {
+ 0}
+IMAGE {
+    pixels hex
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000e0ea66000000000000000000000000000000
+0000000000000000000000de02a336e43903f4f0000000000000000000000000
+000000000000000069ef1a358680062eb017b0ab7af459500000000000000000
+0000000000667c0ea9cc803979937917a03a878787b0e2ae8ae75c0000000000
+00005cea8ea72c8639e293208f7d7d19200639a017ab2ee4ac2ca7097c690000
+00007823a72b2bda198fd54ddad90521219191217d1917cc2b2b2b2baf8e0000
+0000e81f9b9f27014d05d91c2a2a2a7f037ecdcd7e7a012a2a2aaab7c2ef0000
+00006c9f229d981a23282828282828282828282828282828a7b445c3c8de0000
+00005ca249d63d140f139f272727272727272727a5a528af44c3c8ce43000000
+0000009a62ca41a6960e0d941da4a4a4a4a4a4a4a4a9b732525a1084a1000000
+000000965b58b53811940d0b090b1823a3a3252ab4d24c269957571088000000
+000000946162b9b59c0f14b12d0c8b8c98a3afb8ed1bbd82ba74300877000000
+00000088c565c7b5a6962dcf67be07048aa5b84315f326ba7395832950000000
+00000002bed8d4b94214b1c7dbb68c8b04a843e6d1bd814bceeb10a900000000
+0000007b47636ec441b23d4edb3f09078bac4315f340ec855a82995f00000000
+00000059bb63e15d42643dca6b3f8e090735ed76bd81c05224e9f27b00000000
+0000006cbbd47161c1684951dc3f908e8c3ceef38d08ebe96d6d086000000000
+00000050bf67dc54534fdd53ddb20d0b8eb815d10af1732fe312e60000000000
+00000000add6d6bf61c16f566eb20e0d924475bd578572c61e6d340000000000
+0000000016d8d3d03ec76bcfdf3b0f0e13bc4c8d2f84c040cb837b0000000000
+00000000550c47b3365bd45d6f33110f1a4575cbf2c0521e0802000000000000
+000000000000e7ac36be625e7031131122455a0a2f0a99c6e700000000000000
+000000000000006a9e37d36270331613a545f181e53032e80000000000000000
+00000000000000005088c5d371311816a8464b7374ee89000000000000000000
+0000000000000000000077b654a29b18acc24a722a5500000000000000000000
+0000000000000000000000d78a9f9e9b3548c38ac90000000000000000000000
+00000000000000000000000000ef1f9e3cc20200000000000000000000000000
+0000000000000000000000000000e89736780000000000000000000000000000
+00000000000000000000000000000060e0000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+}
diff --git a/src/image/png/testdata/pngsuite/ftbrn2c08.png b/src/image/png/testdata/pngsuite/ftbrn2c08.png
new file mode 100644 (file)
index 0000000..5cca0d6
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbrn2c08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbrn2c08.sng b/src/image/png/testdata/pngsuite/ftbrn2c08.sng
new file mode 100644 (file)
index 0000000..9569bda
--- /dev/null
@@ -0,0 +1,45 @@
+#SNG: from ftbrn2c08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color;
+}
+gAMA {1.0000}
+bKGD {red: 255;  green: 0;  blue: 0;}
+tRNS {
+    red: 255; green: 255; blue: 255;
+}
+IMAGE {
+    pixels hex
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff e3e3e3 c9c9c9 f1f1f1 ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff e8e8e8 b5b5b5 7e7e7e 656565 6e5252 7e2e2e a64343 c79090 ebdddd ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff eeeeee bfbfbf 898989 676767 6b5d5d 7a3939 8a1212 8d0000 850000 770000 840000 9a0101 a22d2d bf7d7d ddd0d0 fcfcfc ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff f2f2f2 c4c4c4 959595 727272 6f6b6b 774444 871e1e 950101 9f0000 910000 800000 720c0c 612d2d 530e0e 500000 590000 850000 920606 7a6666 a0a0a0 cfcfcf f8f8f8 ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff f7f7f7 cacaca 9a9a9a 767676 737373 7c5d5d 872e2e 930707 9e0000 a90000 b00000 c90000 cf0000 b90000 a20101 8c1919 852a2a 7f1313 810000 960000 8f0000 6b5353 6e6e6e 737373 767676 9b9b9b c4c4c4 eeeeee ffffff ffffff 
+ffffff ffffff cccccc 7f7f7f 767676 757575 757575 962f2f b80000 b40000 b60000 ad0c0c 943a3a 925050 b92323 d60202 e20000 ef0000 e70000 da0000 cf0000 ba0000 7d0101 6f6b6b 757575 757575 757575 757575 6a6a6a 9a9a9a ffffff ffffff 
+ffffff ffffff dcdcdc 858585 888888 848484 7b7b7b 855454 b71313 a91d1d 8d4f4f 787575 777777 777777 777777 816b6b aa4141 d62020 ec1010 e90c0c d01212 a52828 7b5858 777777 777777 777777 707070 5c5c5c 525252 bdbdbd ffffff ffffff 
+ffffff ffffff eaeaea 848484 818181 858885 8e8e8e 898989 7f7f7f 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 767676 636363 545454 505050 4c4c4c e6e6e6 ffffff ffffff 
+ffffff ffffff f8f8f8 7f847f 259725 04a504 39a439 8b948b 939393 8f8f8f 838383 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7a7a7a 7a7a7a 797979 6a6a6a 575757 505050 4c4c4c 494949 595959 ffffff ffffff ffffff 
+ffffff ffffff ffffff 8a8a8a 01b301 00c600 00f200 59b659 929292 959595 979797 949494 878787 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 717171 5a5a60 282885 040493 0c0c78 282858 46464a 828282 ffffff ffffff ffffff 
+ffffff ffffff ffffff 929292 0cab0c 00bd00 00f400 20dd20 919191 949494 979797 999999 9b9b9b 999999 8b8b8b 7f7f7f 7e7e7e 7e7e7e 7d7d7d 777777 626262 535360 1212be 0000cc 000092 000069 000067 2a2a55 acacac ffffff ffffff ffffff 
+ffffff ffffff ffffff 949494 16a116 00b400 00e200 00f400 76a276 939393 8d978d 469e46 46a746 8e9e8e 9e9e9e 9c9c9c 8e8e8e 7e7e7e 6a6a6a 5a5a5a 57575a 1818cd 0000f0 0000a0 020260 01013d 000061 1d1d59 d6d6d6 ffffff ffffff ffffff 
+ffffff ffffff ffffff a4a4a4 219821 00aa00 00c800 00f400 3bca3b 929292 4aac4a 00bc00 00a900 2f9a2f 9d9d9d 9f9f9f a0a0a0 7a7a7a 5a5a5a 595959 3131a1 0000ff 0000c6 03035b 191924 0c0c15 0c0c55 3b3b53 fbfbfb ffffff ffffff ffffff 
+ffffff ffffff ffffff b6b6b6 2b8f2b 00a200 00ad00 00eb00 07ed07 899589 43a743 00c900 009900 389538 9c9c9c 9e9e9e 9f9f9f 747474 595959 505067 0505f5 0000f0 030370 383846 484848 161639 2b2b55 727272 ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff c7c7c7 348634 00b100 008d00 00d200 00f300 4c9b4c 3b9e3b 00c700 009800 3d943d 9b9b9b 9d9d9d 9e9e9e 6e6e6e 595959 2b2bad 0000ff 0000a6 252559 43434f 16167e 00009f 01018e 9c9ca1 ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff d8d8d8 3e7d3e 00b100 007b00 00b800 00f100 178b17 3b9c3b 00c600 009700 3d933d 9a9a9a 9b9b9b 9d9d9d 676767 575759 0909ee 0000f0 04046b 33335a 070790 00009e 00007c 0d0d5d c7c7c7 ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff eaeaea 477447 00ad00 008500 099809 00dc00 00a700 239823 00c300 009600 3f923f 989898 9a9a9a 9c9c9c 616161 42427f 0000ff 0000b9 1a1a5d 161649 00007b 00006b 00006b 1c1c56 f4f4f4 ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff fcfcfc 506c50 00a900 009500 2d772d 00c100 00c500 019301 00c100 009000 4b914b 979797 999999 9a9a9a 5a5a5a 2b2ba4 0000f6 000086 2f2f53 191930 020263 000073 00009b 4d4d70 ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff 687368 00a400 00a400 3e653e 14a514 00d400 008b00 00bf00 008e00 4a904a 959595 979797 969696 575757 1a1ab5 0000de 000068 3f3f4b 2b2b2b 0c0c6d 0000b3 00006b 868692 ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff 8c8c8c 059e05 00b000 346634 408540 00ca00 009700 00bc00 008c00 498e49 939393 959595 8f8f8f 565656 0f0fb7 0000b9 030366 474747 2f2f64 0000a2 00009d 090958 c5c5c5 ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff fafafa 90b090 348534 616461 636a63 06af06 00ae00 00b900 008b00 538d53 919191 939393 898989 555555 0a0aa8 00009d 070763 34345c 04049b 0000b1 1a1a4d b5b5bb ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff d0d0d0 6d6d6d 656565 2d8f2d 00b200 00b600 008900 558b55 8f8f8f 919191 818181 555555 15157e 000084 010165 010184 000091 1c1c6e ceced0 ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ececec 868686 587058 00af00 00b300 008800 538953 8d8d8d 8f8f8f 7a7a7a 545454 2c2c49 02026b 000064 000063 292974 dfdfe5 ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff fcfcfc aaaaaa 219821 00b000 008600 578757 8b8b8b 8d8d8d 747474 535353 3d3d3d 1a1a23 0d0d43 474772 ededef ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff d1d6d1 389b38 2d772d 7d817d 888888 8b8b8b 6d6d6d 525252 4f4f4f 373737 777777 fafafa ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff efefef a0a0a0 838383 868686 888888 676767 515151 505050 a0a0a0 fdfdfd ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff fefefe c0c0c0 858585 868686 616161 525252 b7b7b7 ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff dedede 909090 656565 cccccc ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff f5f5f5 e3e3e3 ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 
+}
diff --git a/src/image/png/testdata/pngsuite/ftbwn0g16.png b/src/image/png/testdata/pngsuite/ftbwn0g16.png
new file mode 100644 (file)
index 0000000..99bdeed
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbwn0g16.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbwn3p08.png b/src/image/png/testdata/pngsuite/ftbwn3p08.png
new file mode 100644 (file)
index 0000000..eacab7a
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbwn3p08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbwn3p08.sng b/src/image/png/testdata/pngsuite/ftbwn3p08.sng
new file mode 100644 (file)
index 0000000..7b5aff6
--- /dev/null
@@ -0,0 +1,291 @@
+#SNG: from ftbwn3p08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color palette;
+}
+gAMA {1.0000}
+PLTE {
+    (255,255,255)     # rgb = (0xff,0xff,0xff) grey100
+    (128, 86, 86)     # rgb = (0x80,0x56,0x56)
+    (181,181,184)     # rgb = (0xb5,0xb5,0xb8)
+    (168, 66, 66)     # rgb = (0xa8,0x42,0x42)
+    (159,159,159)     # rgb = (0x9f,0x9f,0x9f)
+    (177, 32, 32)     # rgb = (0xb1,0x20,0x20)
+    (139, 21, 21)     # rgb = (0x8b,0x15,0x15)
+    (157,157,157)     # rgb = (0x9d,0x9d,0x9d)
+    ( 27, 27, 89)     # rgb = (0x1b,0x1b,0x59)
+    (155,155,155)     # rgb = (0x9b,0x9b,0x9b)
+    (  0,  0,132)     # rgb = (0x00,0x00,0x84)
+    (153,153,153)     # rgb = (0x99,0x99,0x99) grey60
+    (143,167,143)     # rgb = (0x8f,0xa7,0x8f)
+    (151,151,151)     # rgb = (0x97,0x97,0x97)
+    (149,149,149)     # rgb = (0x95,0x95,0x95)
+    (147,147,147)     # rgb = (0x93,0x93,0x93)
+    ( 41, 41, 86)     # rgb = (0x29,0x29,0x56)
+    (145,145,145)     # rgb = (0x91,0x91,0x91) grey57
+    (  0,  0,155)     # rgb = (0x00,0x00,0x9b)
+    (143,143,143)     # rgb = (0x8f,0x8f,0x8f) grey56
+    (139,149,139)     # rgb = (0x8b,0x95,0x8b)
+    ( 46, 46,167)     # rgb = (0x2e,0x2e,0xa7)
+    (141,141,141)     # rgb = (0x8d,0x8d,0x8d)
+    (128,  0,  0)     # rgb = (0x80,0x00,0x00)
+    (139,139,139)     # rgb = (0x8b,0x8b,0x8b)
+    (185,  0,  0)     # rgb = (0xb9,0x00,0x00)
+    (137,137,137)     # rgb = (0x89,0x89,0x89)
+    ( 12, 12,213)     # rgb = (0x0c,0x0c,0xd5)
+    (120,117,117)     # rgb = (0x78,0x75,0x75)
+    (135,135,135)     # rgb = (0x87,0x87,0x87) grey53
+    (  0,  0,178)     # rgb = (0x00,0x00,0xb2)
+    (133,133,133)     # rgb = (0x85,0x85,0x85) grey52
+    (165,  0,  0)     # rgb = (0xa5,0x00,0x00)
+    (222,  0,  0)     # rgb = (0xde,0x00,0x00)
+    (129,129,129)     # rgb = (0x81,0x81,0x81)
+    (127,127,127)     # rgb = (0x7f,0x7f,0x7f) grey50
+    (  0,  0,158)     # rgb = (0x00,0x00,0x9e)
+    (125,125,125)     # rgb = (0x7d,0x7d,0x7d) grey49
+    (  0,  0,201)     # rgb = (0x00,0x00,0xc9)
+    (123,123,123)     # rgb = (0x7b,0x7b,0x7b)
+    (121,121,121)     # rgb = (0x79,0x79,0x79)
+    ( 55, 55, 86)     # rgb = (0x37,0x37,0x56)
+    (119,119,119)     # rgb = (0x77,0x77,0x77)
+    (117,117,117)     # rgb = (0x75,0x75,0x75) grey46
+    (115,115,115)     # rgb = (0x73,0x73,0x73) grey45
+    ( 72,169, 72)     # rgb = (0x48,0xa9,0x48)
+    (142,  0,  0)     # rgb = (0x8e,0x00,0x00)
+    (  2,  2,100)     # rgb = (0x02,0x02,0x64)
+    (  0,  0, 98)     # rgb = (0x00,0x00,0x62)
+    ( 86,137, 86)     # rgb = (0x56,0x89,0x56)
+    ( 40, 40,124)     # rgb = (0x28,0x28,0x7c)
+    ( 83,139, 83)     # rgb = (0x53,0x8b,0x53)
+    (137,137,143)     # rgb = (0x89,0x89,0x8f)
+    (103,103,103)     # rgb = (0x67,0x67,0x67)
+    (101,101,101)     # rgb = (0x65,0x65,0x65)
+    ( 93,109, 93)     # rgb = (0x5d,0x6d,0x5d)
+    ( 19,229, 19)     # rgb = (0x13,0xe5,0x13)
+    (134, 38, 38)     # rgb = (0x86,0x26,0x26)
+    (111, 45, 45)     # rgb = (0x6f,0x2d,0x2d)
+    ( 68,145, 68)     # rgb = (0x44,0x91,0x44)
+    ( 97, 97, 97)     # rgb = (0x61,0x61,0x61) grey38
+    ( 59,157, 59)     # rgb = (0x3b,0x9d,0x3b)
+    ( 68,137, 68)     # rgb = (0x44,0x89,0x44)
+    ( 61,147, 61)     # rgb = (0x3d,0x93,0x3d)
+    (  0,  0,164)     # rgb = (0x00,0x00,0xa4)
+    (  0,243,  0)     # rgb = (0x00,0xf3,0x00)
+    (  0,241,  0)     # rgb = (0x00,0xf1,0x00)
+    ( 89, 89, 89)     # rgb = (0x59,0x59,0x59) grey35
+    ( 87, 87, 87)     # rgb = (0x57,0x57,0x57) grey34
+    ( 85, 85, 85)     # rgb = (0x55,0x55,0x55)
+    ( 83, 83, 83)     # rgb = (0x53,0x53,0x53)
+    ( 52,133, 52)     # rgb = (0x34,0x85,0x34)
+    ( 81, 81, 81)     # rgb = (0x51,0x51,0x51)
+    ( 36,151, 36)     # rgb = (0x24,0x97,0x24)
+    ( 79, 79, 79)     # rgb = (0x4f,0x4f,0x4f) grey31
+    ( 58, 58, 65)     # rgb = (0x3a,0x3a,0x41)
+    ( 16, 16,186)     # rgb = (0x10,0x10,0xba)
+    (178, 15, 15)     # rgb = (0xb2,0x0f,0x0f)
+    (  0,199,  0)     # rgb = (0x00,0xc7,0x00)
+    (  0,197,  0)     # rgb = (0x00,0xc5,0x00)
+    (252,252,252)     # rgb = (0xfc,0xfc,0xfc) grey99
+    (  0,195,  0)     # rgb = (0x00,0xc3,0x00)
+    (  4,  4,151)     # rgb = (0x04,0x04,0x97)
+    (  0,193,  0)     # rgb = (0x00,0xc1,0x00)
+    ( 45,119, 45)     # rgb = (0x2d,0x77,0x2d)
+    (250,250,250)     # rgb = (0xfa,0xfa,0xfa) grey98
+    (  0,191,  0)     # rgb = (0x00,0xbf,0x00)
+    (  0,  0,104)     # rgb = (0x00,0x00,0x68)
+    (  0,189,  0)     # rgb = (0x00,0xbd,0x00)
+    (218,212,212)     # rgb = (0xda,0xd4,0xd4)
+    ( 16, 16,123)     # rgb = (0x10,0x10,0x7b)
+    (  9,173,  9)     # rgb = (0x09,0xad,0x09)
+    (248,248,248)     # rgb = (0xf8,0xf8,0xf8)
+    (  0,185,  0)     # rgb = (0x00,0xb9,0x00)
+    (  0,183,  0)     # rgb = (0x00,0xb7,0x00)
+    (156,156,161)     # rgb = (0x9c,0x9c,0xa1)
+    (246,246,246)     # rgb = (0xf6,0xf6,0xf6)
+    ( 12,161, 12)     # rgb = (0x0c,0xa1,0x0c)
+    (  0,179,  0)     # rgb = (0x00,0xb3,0x00)
+    (  0,177,  0)     # rgb = (0x00,0xb1,0x00)
+    ( 16,145, 16)     # rgb = (0x10,0x91,0x10)
+    (  0,171,  0)     # rgb = (0x00,0xab,0x00)
+    (242,242,242)     # rgb = (0xf2,0xf2,0xf2) grey95
+    (  0,169,  0)     # rgb = (0x00,0xa9,0x00)
+    (  0,167,  0)     # rgb = (0x00,0xa7,0x00)
+    (238,238,238)     # rgb = (0xee,0xee,0xee)
+    (236,236,236)     # rgb = (0xec,0xec,0xec)
+    (  0,151,  0)     # rgb = (0x00,0x97,0x00)
+    (234,234,234)     # rgb = (0xea,0xea,0xea)
+    (  0,  0,107)     # rgb = (0x00,0x00,0x6b)
+    (  0,141,  0)     # rgb = (0x00,0x8d,0x00)
+    (  0,139,  0)     # rgb = (0x00,0x8b,0x00) green4
+    (  0,137,  0)     # rgb = (0x00,0x89,0x00)
+    (  0,135,  0)     # rgb = (0x00,0x87,0x00)
+    ( 49, 49, 49)     # rgb = (0x31,0x31,0x31)
+    ( 25, 25, 42)     # rgb = (0x19,0x19,0x2a)
+    (  7,  7, 64)     # rgb = (0x07,0x07,0x40)
+    ( 18, 18,174)     # rgb = (0x12,0x12,0xae)
+    (  9,  9,238)     # rgb = (0x09,0x09,0xee)
+    (211,214,211)     # rgb = (0xd3,0xd6,0xd3)
+    (204,204,204)     # rgb = (0xcc,0xcc,0xcc) grey80
+    (147,  0,  0)     # rgb = (0x93,0x00,0x00)
+    (163, 42, 42)     # rgb = (0xa3,0x2a,0x2a)
+    (198,198,198)     # rgb = (0xc6,0xc6,0xc6)
+    (196,196,196)     # rgb = (0xc4,0xc4,0xc4) grey77
+    (204,  0,  0)     # rgb = (0xcc,0x00,0x00)
+    (211, 10, 10)     # rgb = (0xd3,0x0a,0x0a)
+    (129,107,107)     # rgb = (0x81,0x6b,0x6b)
+    (120, 62, 62)     # rgb = (0x78,0x3e,0x3e)
+    (  3,  3,109)     # rgb = (0x03,0x03,0x6d)
+    (  0,  0,159)     # rgb = (0x00,0x00,0x9f)
+    ( 10, 10, 86)     # rgb = (0x0a,0x0a,0x56)
+    ( 70, 70, 72)     # rgb = (0x46,0x46,0x48)
+    ( 65, 65, 77)     # rgb = (0x41,0x41,0x4d)
+    (115, 93, 93)     # rgb = (0x73,0x5d,0x5d)
+    ( 81,  7,  7)     # rgb = (0x51,0x07,0x07)
+    (168,168,168)     # rgb = (0xa8,0xa8,0xa8) grey66
+    (237,237,239)     # rgb = (0xed,0xed,0xef)
+    (160,160,160)     # rgb = (0xa0,0xa0,0xa0)
+    (158,158,158)     # rgb = (0x9e,0x9e,0x9e) grey62
+    (156,156,156)     # rgb = (0x9c,0x9c,0x9c) grey61
+    (  0,  0,185)     # rgb = (0x00,0x00,0xb9)
+    (154,154,154)     # rgb = (0x9a,0x9a,0x9a)
+    (178,  0,  0)     # rgb = (0xb2,0x00,0x00)
+    (152,152,152)     # rgb = (0x98,0x98,0x98)
+    (235,  0,  0)     # rgb = (0xeb,0x00,0x00)
+    (150,150,150)     # rgb = (0x96,0x96,0x96) grey59
+    (158,  0,  0)     # rgb = (0x9e,0x00,0x00)
+    (148,148,148)     # rgb = (0x94,0x94,0x94) grey58
+    ( 19, 19, 28)     # rgb = (0x13,0x13,0x1c)
+    (146,146,146)     # rgb = (0x92,0x92,0x92)
+    (144,144,144)     # rgb = (0x90,0x90,0x90)
+    (142,142,142)     # rgb = (0x8e,0x8e,0x8e)
+    (  0,  0,145)     # rgb = (0x00,0x00,0x91)
+    (138,138,138)     # rgb = (0x8a,0x8a,0x8a) grey54
+    (136,136,136)     # rgb = (0x88,0x88,0x88)
+    (118,162,118)     # rgb = (0x76,0xa2,0x76)
+    (133,136,133)     # rgb = (0x85,0x88,0x85)
+    (134,134,134)     # rgb = (0x86,0x86,0x86)
+    (132,132,132)     # rgb = (0x84,0x84,0x84)
+    (120, 15, 15)     # rgb = (0x78,0x0f,0x0f)
+    (130,130,130)     # rgb = (0x82,0x82,0x82) grey51
+    (126,130,126)     # rgb = (0x7e,0x82,0x7e)
+    (126,126,126)     # rgb = (0x7e,0x7e,0x7e)
+    (124,124,124)     # rgb = (0x7c,0x7c,0x7c)
+    (122,122,122)     # rgb = (0x7a,0x7a,0x7a) grey48
+    ( 74,192, 74)     # rgb = (0x4a,0xc0,0x4a)
+    (118,118,118)     # rgb = (0x76,0x76,0x76)
+    (116,116,116)     # rgb = (0x74,0x74,0x74)
+    (114,114,114)     # rgb = (0x72,0x72,0x72)
+    (112,112,112)     # rgb = (0x70,0x70,0x70) grey44
+    (152,  0,  0)     # rgb = (0x98,0x00,0x00)
+    (110,110,110)     # rgb = (0x6e,0x6e,0x6e) grey43
+    (106,112,106)     # rgb = (0x6a,0x70,0x6a)
+    (122,102,102)     # rgb = (0x7a,0x66,0x66)
+    (106,106,106)     # rgb = (0x6a,0x6a,0x6a)
+    (132,  0,  0)     # rgb = (0x84,0x00,0x00)
+    ( 68,162, 68)     # rgb = (0x44,0xa2,0x44)
+    ( 75,150, 75)     # rgb = (0x4b,0x96,0x4b)
+    ( 97,100, 97)     # rgb = (0x61,0x64,0x61)
+    ( 98, 98, 98)     # rgb = (0x62,0x62,0x62)
+    (  0,244,  0)     # rgb = (0x00,0xf4,0x00)
+    ( 56,152, 56)     # rgb = (0x38,0x98,0x38)
+    ( 92, 92, 92)     # rgb = (0x5c,0x5c,0x5c) grey36
+    ( 90, 90, 90)     # rgb = (0x5a,0x5a,0x5a)
+    (  0,230,  0)     # rgb = (0x00,0xe6,0x00)
+    (  2,  2, 93)     # rgb = (0x02,0x02,0x5d)
+    ( 66,120, 66)     # rgb = (0x42,0x78,0x42)
+    ( 86, 86, 86)     # rgb = (0x56,0x56,0x56)
+    (  0,  0,240)     # rgb = (0x00,0x00,0xf0)
+    ( 46,148, 46)     # rgb = (0x2e,0x94,0x2e)
+    ( 71,104, 71)     # rgb = (0x47,0x68,0x47)
+    ( 49, 49, 96)     # rgb = (0x31,0x31,0x60)
+    (  0,216,  0)     # rgb = (0x00,0xd8,0x00)
+    ( 82, 82, 82)     # rgb = (0x52,0x52,0x52) grey32
+    ( 80, 80, 80)     # rgb = (0x50,0x50,0x50)
+    (  0,206,  0)     # rgb = (0x00,0xce,0x00)
+    ( 33,152, 33)     # rgb = (0x21,0x98,0x21)
+    ( 20, 20,109)     # rgb = (0x14,0x14,0x6d)
+    (  0,200,  0)     # rgb = (0x00,0xc8,0x00)
+    ( 76, 76, 76)     # rgb = (0x4c,0x4c,0x4c)
+    (253,253,253)     # rgb = (0xfd,0xfd,0xfd)
+    (  0,198,  0)     # rgb = (0x00,0xc6,0x00)
+    (  0,  0,157)     # rgb = (0x00,0x00,0x9d)
+    (111,107,107)     # rgb = (0x6f,0x6b,0x6b)
+    (234, 14, 14)     # rgb = (0xea,0x0e,0x0e)
+    ( 72, 72, 72)     # rgb = (0x48,0x48,0x48)
+    (  0,188,  0)     # rgb = (0x00,0xbc,0x00)
+    ( 52,102, 52)     # rgb = (0x34,0x66,0x34)
+    (  2,  2,245)     # rgb = (0x02,0x02,0xf5)
+    ( 83, 83, 96)     # rgb = (0x53,0x53,0x60)
+    (  0,176,  0)     # rgb = (0x00,0xb0,0x00)
+    (  0,174,  0)     # rgb = (0x00,0xae,0x00)
+    (183,  0,  0)     # rgb = (0xb7,0x00,0x00)
+    (  0,164,  0)     # rgb = (0x00,0xa4,0x00)
+    (239,239,239)     # rgb = (0xef,0xef,0xef)
+    (  0,162,  0)     # rgb = (0x00,0xa2,0x00)
+    (143, 79, 79)     # rgb = (0x8f,0x4f,0x4f)
+    (149, 52, 52)     # rgb = (0x95,0x34,0x34)
+    (  0,152,  0)     # rgb = (0x00,0x98,0x00)
+    (  0,150,  0)     # rgb = (0x00,0x96,0x00)
+    (  0,146,  0)     # rgb = (0x00,0x92,0x00)
+    (231,231,231)     # rgb = (0xe7,0xe7,0xe7)
+    (  0,140,  0)     # rgb = (0x00,0x8c,0x00)
+    (227,227,227)     # rgb = (0xe3,0xe3,0xe3) grey89
+    (  0,128,  0)     # rgb = (0x00,0x80,0x00)
+    (146,  6,  6)     # rgb = (0x92,0x06,0x06)
+    (  1,  1,111)     # rgb = (0x01,0x01,0x6f)
+    (100, 86, 89)     # rgb = (0x64,0x56,0x59)
+    (  0,  0,100)     # rgb = (0x00,0x00,0x64)
+    ( 78, 78,107)     # rgb = (0x4e,0x4e,0x6b)
+    (207,207,207)     # rgb = (0xcf,0xcf,0xcf) grey81
+    (221,221,224)     # rgb = (0xdd,0xdd,0xe0)
+    (  0,  0,123)     # rgb = (0x00,0x00,0x7b)
+    (201,201,201)     # rgb = (0xc9,0xc9,0xc9) grey79
+    ( 22, 22, 65)     # rgb = (0x16,0x16,0x41)
+    ( 33, 33, 89)     # rgb = (0x21,0x21,0x59)
+    ( 87, 87, 89)     # rgb = (0x57,0x57,0x59)
+    ( 68, 68,120)     # rgb = (0x44,0x44,0x78)
+    (191,191,191)     # rgb = (0xbf,0xbf,0xbf) grey75
+    (235,221,221)     # rgb = (0xeb,0xdd,0xdd)
+    ( 45, 45, 84)     # rgb = (0x2d,0x2d,0x54)
+    ( 10, 10, 96)     # rgb = (0x0a,0x0a,0x60)
+    (  0,  0,255)     # rgb = (0x00,0x00,0xff) blue1
+    (191,125,125)     # rgb = (0xbf,0x7d,0x7d)
+}
+bKGD {index: 0}
+tRNS {
+ 0}
+IMAGE {
+    pixels hex
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000e0ea66000000000000000000000000000000
+0000000000000000000000de02a336e43903f4f0000000000000000000000000
+000000000000000069ef1a358680062eb017b0ab7af459500000000000000000
+0000000000667c0ea9cc803979937917a03a878787b0e2ae8ae75c0000000000
+00005cea8ea72c8639e293208f7d7d19200639a017ab2ee4ac2ca7097c690000
+00007823a72b2bda198fd54ddad90521219191217d1917cc2b2b2b2baf8e0000
+0000e81f9b9f27014d05d91c2a2a2a7f037ecdcd7e7a012a2a2aaab7c2ef0000
+00006c9f229d981a23282828282828282828282828282828a7b445c3c8de0000
+00005ca249d63d140f139f272727272727272727a5a528af44c3c8ce43000000
+0000009a62ca41a6960e0d941da4a4a4a4a4a4a4a4a9b732525a1084a1000000
+000000965b58b53811940d0b090b1823a3a3252ab4d24c269957571088000000
+000000946162b9b59c0f14b12d0c8b8c98a3afb8ed1bbd82ba74300877000000
+00000088c565c7b5a6962dcf67be07048aa5b84315f326ba7395832950000000
+00000002bed8d4b94214b1c7dbb68c8b04a843e6d1bd814bceeb10a900000000
+0000007b47636ec441b23d4edb3f09078bac4315f340ec855a82995f00000000
+00000059bb63e15d42643dca6b3f8e090735ed76bd81c05224e9f27b00000000
+0000006cbbd47161c1684951dc3f908e8c3ceef38d08ebe96d6d086000000000
+00000050bf67dc54534fdd53ddb20d0b8eb815d10af1732fe312e60000000000
+00000000add6d6bf61c16f566eb20e0d924475bd578572c61e6d340000000000
+0000000016d8d3d03ec76bcfdf3b0f0e13bc4c8d2f84c040cb837b0000000000
+00000000550c47b3365bd45d6f33110f1a4575cbf2c0521e0802000000000000
+000000000000e7ac36be625e7031131122455a0a2f0a99c6e700000000000000
+000000000000006a9e37d36270331613a545f181e53032e80000000000000000
+00000000000000005088c5d371311816a8464b7374ee89000000000000000000
+0000000000000000000077b654a29b18acc24a722a5500000000000000000000
+0000000000000000000000d78a9f9e9b3548c38ac90000000000000000000000
+00000000000000000000000000ef1f9e3cc20200000000000000000000000000
+0000000000000000000000000000e89736780000000000000000000000000000
+00000000000000000000000000000060e0000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+}
diff --git a/src/image/png/testdata/pngsuite/ftbyn3p08.png b/src/image/png/testdata/pngsuite/ftbyn3p08.png
new file mode 100644 (file)
index 0000000..656db09
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftbyn3p08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftbyn3p08.sng b/src/image/png/testdata/pngsuite/ftbyn3p08.sng
new file mode 100644 (file)
index 0000000..5d61987
--- /dev/null
@@ -0,0 +1,292 @@
+#SNG: from ftbyn3p08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color palette;
+}
+gAMA {1.0000}
+PLTE {
+    (255,255,255)     # rgb = (0xff,0xff,0xff) grey100
+    (128, 86, 86)     # rgb = (0x80,0x56,0x56)
+    (181,181,184)     # rgb = (0xb5,0xb5,0xb8)
+    (168, 66, 66)     # rgb = (0xa8,0x42,0x42)
+    (159,159,159)     # rgb = (0x9f,0x9f,0x9f)
+    (177, 32, 32)     # rgb = (0xb1,0x20,0x20)
+    (139, 21, 21)     # rgb = (0x8b,0x15,0x15)
+    (157,157,157)     # rgb = (0x9d,0x9d,0x9d)
+    ( 27, 27, 89)     # rgb = (0x1b,0x1b,0x59)
+    (155,155,155)     # rgb = (0x9b,0x9b,0x9b)
+    (  0,  0,132)     # rgb = (0x00,0x00,0x84)
+    (153,153,153)     # rgb = (0x99,0x99,0x99) grey60
+    (143,167,143)     # rgb = (0x8f,0xa7,0x8f)
+    (151,151,151)     # rgb = (0x97,0x97,0x97)
+    (149,149,149)     # rgb = (0x95,0x95,0x95)
+    (147,147,147)     # rgb = (0x93,0x93,0x93)
+    ( 41, 41, 86)     # rgb = (0x29,0x29,0x56)
+    (145,145,145)     # rgb = (0x91,0x91,0x91) grey57
+    (  0,  0,155)     # rgb = (0x00,0x00,0x9b)
+    (143,143,143)     # rgb = (0x8f,0x8f,0x8f) grey56
+    (139,149,139)     # rgb = (0x8b,0x95,0x8b)
+    ( 46, 46,167)     # rgb = (0x2e,0x2e,0xa7)
+    (141,141,141)     # rgb = (0x8d,0x8d,0x8d)
+    (128,  0,  0)     # rgb = (0x80,0x00,0x00)
+    (139,139,139)     # rgb = (0x8b,0x8b,0x8b)
+    (185,  0,  0)     # rgb = (0xb9,0x00,0x00)
+    (137,137,137)     # rgb = (0x89,0x89,0x89)
+    ( 12, 12,213)     # rgb = (0x0c,0x0c,0xd5)
+    (120,117,117)     # rgb = (0x78,0x75,0x75)
+    (135,135,135)     # rgb = (0x87,0x87,0x87) grey53
+    (  0,  0,178)     # rgb = (0x00,0x00,0xb2)
+    (133,133,133)     # rgb = (0x85,0x85,0x85) grey52
+    (165,  0,  0)     # rgb = (0xa5,0x00,0x00)
+    (222,  0,  0)     # rgb = (0xde,0x00,0x00)
+    (129,129,129)     # rgb = (0x81,0x81,0x81)
+    (127,127,127)     # rgb = (0x7f,0x7f,0x7f) grey50
+    (  0,  0,158)     # rgb = (0x00,0x00,0x9e)
+    (125,125,125)     # rgb = (0x7d,0x7d,0x7d) grey49
+    (  0,  0,201)     # rgb = (0x00,0x00,0xc9)
+    (123,123,123)     # rgb = (0x7b,0x7b,0x7b)
+    (121,121,121)     # rgb = (0x79,0x79,0x79)
+    ( 55, 55, 86)     # rgb = (0x37,0x37,0x56)
+    (119,119,119)     # rgb = (0x77,0x77,0x77)
+    (117,117,117)     # rgb = (0x75,0x75,0x75) grey46
+    (115,115,115)     # rgb = (0x73,0x73,0x73) grey45
+    ( 72,169, 72)     # rgb = (0x48,0xa9,0x48)
+    (142,  0,  0)     # rgb = (0x8e,0x00,0x00)
+    (  2,  2,100)     # rgb = (0x02,0x02,0x64)
+    (  0,  0, 98)     # rgb = (0x00,0x00,0x62)
+    ( 86,137, 86)     # rgb = (0x56,0x89,0x56)
+    ( 40, 40,124)     # rgb = (0x28,0x28,0x7c)
+    ( 83,139, 83)     # rgb = (0x53,0x8b,0x53)
+    (137,137,143)     # rgb = (0x89,0x89,0x8f)
+    (103,103,103)     # rgb = (0x67,0x67,0x67)
+    (101,101,101)     # rgb = (0x65,0x65,0x65)
+    ( 93,109, 93)     # rgb = (0x5d,0x6d,0x5d)
+    ( 19,229, 19)     # rgb = (0x13,0xe5,0x13)
+    (134, 38, 38)     # rgb = (0x86,0x26,0x26)
+    (111, 45, 45)     # rgb = (0x6f,0x2d,0x2d)
+    ( 68,145, 68)     # rgb = (0x44,0x91,0x44)
+    ( 97, 97, 97)     # rgb = (0x61,0x61,0x61) grey38
+    ( 59,157, 59)     # rgb = (0x3b,0x9d,0x3b)
+    ( 68,137, 68)     # rgb = (0x44,0x89,0x44)
+    ( 61,147, 61)     # rgb = (0x3d,0x93,0x3d)
+    (  0,  0,164)     # rgb = (0x00,0x00,0xa4)
+    (  0,243,  0)     # rgb = (0x00,0xf3,0x00)
+    (  0,241,  0)     # rgb = (0x00,0xf1,0x00)
+    ( 89, 89, 89)     # rgb = (0x59,0x59,0x59) grey35
+    ( 87, 87, 87)     # rgb = (0x57,0x57,0x57) grey34
+    ( 85, 85, 85)     # rgb = (0x55,0x55,0x55)
+    ( 83, 83, 83)     # rgb = (0x53,0x53,0x53)
+    ( 52,133, 52)     # rgb = (0x34,0x85,0x34)
+    ( 81, 81, 81)     # rgb = (0x51,0x51,0x51)
+    ( 36,151, 36)     # rgb = (0x24,0x97,0x24)
+    ( 79, 79, 79)     # rgb = (0x4f,0x4f,0x4f) grey31
+    ( 58, 58, 65)     # rgb = (0x3a,0x3a,0x41)
+    ( 16, 16,186)     # rgb = (0x10,0x10,0xba)
+    (178, 15, 15)     # rgb = (0xb2,0x0f,0x0f)
+    (  0,199,  0)     # rgb = (0x00,0xc7,0x00)
+    (  0,197,  0)     # rgb = (0x00,0xc5,0x00)
+    (252,252,252)     # rgb = (0xfc,0xfc,0xfc) grey99
+    (  0,195,  0)     # rgb = (0x00,0xc3,0x00)
+    (  4,  4,151)     # rgb = (0x04,0x04,0x97)
+    (  0,193,  0)     # rgb = (0x00,0xc1,0x00)
+    ( 45,119, 45)     # rgb = (0x2d,0x77,0x2d)
+    (250,250,250)     # rgb = (0xfa,0xfa,0xfa) grey98
+    (  0,191,  0)     # rgb = (0x00,0xbf,0x00)
+    (  0,  0,104)     # rgb = (0x00,0x00,0x68)
+    (  0,189,  0)     # rgb = (0x00,0xbd,0x00)
+    (218,212,212)     # rgb = (0xda,0xd4,0xd4)
+    ( 16, 16,123)     # rgb = (0x10,0x10,0x7b)
+    (  9,173,  9)     # rgb = (0x09,0xad,0x09)
+    (248,248,248)     # rgb = (0xf8,0xf8,0xf8)
+    (  0,185,  0)     # rgb = (0x00,0xb9,0x00)
+    (  0,183,  0)     # rgb = (0x00,0xb7,0x00)
+    (156,156,161)     # rgb = (0x9c,0x9c,0xa1)
+    (246,246,246)     # rgb = (0xf6,0xf6,0xf6)
+    ( 12,161, 12)     # rgb = (0x0c,0xa1,0x0c)
+    (  0,179,  0)     # rgb = (0x00,0xb3,0x00)
+    (  0,177,  0)     # rgb = (0x00,0xb1,0x00)
+    ( 16,145, 16)     # rgb = (0x10,0x91,0x10)
+    (  0,171,  0)     # rgb = (0x00,0xab,0x00)
+    (242,242,242)     # rgb = (0xf2,0xf2,0xf2) grey95
+    (  0,169,  0)     # rgb = (0x00,0xa9,0x00)
+    (  0,167,  0)     # rgb = (0x00,0xa7,0x00)
+    (238,238,238)     # rgb = (0xee,0xee,0xee)
+    (236,236,236)     # rgb = (0xec,0xec,0xec)
+    (  0,151,  0)     # rgb = (0x00,0x97,0x00)
+    (234,234,234)     # rgb = (0xea,0xea,0xea)
+    (  0,  0,107)     # rgb = (0x00,0x00,0x6b)
+    (  0,141,  0)     # rgb = (0x00,0x8d,0x00)
+    (  0,139,  0)     # rgb = (0x00,0x8b,0x00) green4
+    (  0,137,  0)     # rgb = (0x00,0x89,0x00)
+    (  0,135,  0)     # rgb = (0x00,0x87,0x00)
+    ( 49, 49, 49)     # rgb = (0x31,0x31,0x31)
+    ( 25, 25, 42)     # rgb = (0x19,0x19,0x2a)
+    (  7,  7, 64)     # rgb = (0x07,0x07,0x40)
+    ( 18, 18,174)     # rgb = (0x12,0x12,0xae)
+    (  9,  9,238)     # rgb = (0x09,0x09,0xee)
+    (211,214,211)     # rgb = (0xd3,0xd6,0xd3)
+    (204,204,204)     # rgb = (0xcc,0xcc,0xcc) grey80
+    (147,  0,  0)     # rgb = (0x93,0x00,0x00)
+    (163, 42, 42)     # rgb = (0xa3,0x2a,0x2a)
+    (198,198,198)     # rgb = (0xc6,0xc6,0xc6)
+    (196,196,196)     # rgb = (0xc4,0xc4,0xc4) grey77
+    (204,  0,  0)     # rgb = (0xcc,0x00,0x00)
+    (211, 10, 10)     # rgb = (0xd3,0x0a,0x0a)
+    (129,107,107)     # rgb = (0x81,0x6b,0x6b)
+    (120, 62, 62)     # rgb = (0x78,0x3e,0x3e)
+    (  3,  3,109)     # rgb = (0x03,0x03,0x6d)
+    (  0,  0,159)     # rgb = (0x00,0x00,0x9f)
+    ( 10, 10, 86)     # rgb = (0x0a,0x0a,0x56)
+    ( 70, 70, 72)     # rgb = (0x46,0x46,0x48)
+    ( 65, 65, 77)     # rgb = (0x41,0x41,0x4d)
+    (115, 93, 93)     # rgb = (0x73,0x5d,0x5d)
+    ( 81,  7,  7)     # rgb = (0x51,0x07,0x07)
+    (168,168,168)     # rgb = (0xa8,0xa8,0xa8) grey66
+    (237,237,239)     # rgb = (0xed,0xed,0xef)
+    (160,160,160)     # rgb = (0xa0,0xa0,0xa0)
+    (158,158,158)     # rgb = (0x9e,0x9e,0x9e) grey62
+    (156,156,156)     # rgb = (0x9c,0x9c,0x9c) grey61
+    (  0,  0,185)     # rgb = (0x00,0x00,0xb9)
+    (154,154,154)     # rgb = (0x9a,0x9a,0x9a)
+    (178,  0,  0)     # rgb = (0xb2,0x00,0x00)
+    (152,152,152)     # rgb = (0x98,0x98,0x98)
+    (235,  0,  0)     # rgb = (0xeb,0x00,0x00)
+    (150,150,150)     # rgb = (0x96,0x96,0x96) grey59
+    (158,  0,  0)     # rgb = (0x9e,0x00,0x00)
+    (148,148,148)     # rgb = (0x94,0x94,0x94) grey58
+    ( 19, 19, 28)     # rgb = (0x13,0x13,0x1c)
+    (146,146,146)     # rgb = (0x92,0x92,0x92)
+    (144,144,144)     # rgb = (0x90,0x90,0x90)
+    (142,142,142)     # rgb = (0x8e,0x8e,0x8e)
+    (  0,  0,145)     # rgb = (0x00,0x00,0x91)
+    (138,138,138)     # rgb = (0x8a,0x8a,0x8a) grey54
+    (136,136,136)     # rgb = (0x88,0x88,0x88)
+    (118,162,118)     # rgb = (0x76,0xa2,0x76)
+    (133,136,133)     # rgb = (0x85,0x88,0x85)
+    (134,134,134)     # rgb = (0x86,0x86,0x86)
+    (132,132,132)     # rgb = (0x84,0x84,0x84)
+    (120, 15, 15)     # rgb = (0x78,0x0f,0x0f)
+    (130,130,130)     # rgb = (0x82,0x82,0x82) grey51
+    (126,130,126)     # rgb = (0x7e,0x82,0x7e)
+    (126,126,126)     # rgb = (0x7e,0x7e,0x7e)
+    (124,124,124)     # rgb = (0x7c,0x7c,0x7c)
+    (122,122,122)     # rgb = (0x7a,0x7a,0x7a) grey48
+    ( 74,192, 74)     # rgb = (0x4a,0xc0,0x4a)
+    (118,118,118)     # rgb = (0x76,0x76,0x76)
+    (116,116,116)     # rgb = (0x74,0x74,0x74)
+    (114,114,114)     # rgb = (0x72,0x72,0x72)
+    (112,112,112)     # rgb = (0x70,0x70,0x70) grey44
+    (152,  0,  0)     # rgb = (0x98,0x00,0x00)
+    (110,110,110)     # rgb = (0x6e,0x6e,0x6e) grey43
+    (106,112,106)     # rgb = (0x6a,0x70,0x6a)
+    (122,102,102)     # rgb = (0x7a,0x66,0x66)
+    (106,106,106)     # rgb = (0x6a,0x6a,0x6a)
+    (132,  0,  0)     # rgb = (0x84,0x00,0x00)
+    ( 68,162, 68)     # rgb = (0x44,0xa2,0x44)
+    ( 75,150, 75)     # rgb = (0x4b,0x96,0x4b)
+    ( 97,100, 97)     # rgb = (0x61,0x64,0x61)
+    ( 98, 98, 98)     # rgb = (0x62,0x62,0x62)
+    (  0,244,  0)     # rgb = (0x00,0xf4,0x00)
+    ( 56,152, 56)     # rgb = (0x38,0x98,0x38)
+    ( 92, 92, 92)     # rgb = (0x5c,0x5c,0x5c) grey36
+    ( 90, 90, 90)     # rgb = (0x5a,0x5a,0x5a)
+    (  0,230,  0)     # rgb = (0x00,0xe6,0x00)
+    (  2,  2, 93)     # rgb = (0x02,0x02,0x5d)
+    ( 66,120, 66)     # rgb = (0x42,0x78,0x42)
+    ( 86, 86, 86)     # rgb = (0x56,0x56,0x56)
+    (  0,  0,240)     # rgb = (0x00,0x00,0xf0)
+    ( 46,148, 46)     # rgb = (0x2e,0x94,0x2e)
+    ( 71,104, 71)     # rgb = (0x47,0x68,0x47)
+    ( 49, 49, 96)     # rgb = (0x31,0x31,0x60)
+    (  0,216,  0)     # rgb = (0x00,0xd8,0x00)
+    ( 82, 82, 82)     # rgb = (0x52,0x52,0x52) grey32
+    ( 80, 80, 80)     # rgb = (0x50,0x50,0x50)
+    (  0,206,  0)     # rgb = (0x00,0xce,0x00)
+    ( 33,152, 33)     # rgb = (0x21,0x98,0x21)
+    ( 20, 20,109)     # rgb = (0x14,0x14,0x6d)
+    (  0,200,  0)     # rgb = (0x00,0xc8,0x00)
+    ( 76, 76, 76)     # rgb = (0x4c,0x4c,0x4c)
+    (253,253,253)     # rgb = (0xfd,0xfd,0xfd)
+    (  0,198,  0)     # rgb = (0x00,0xc6,0x00)
+    (  0,  0,157)     # rgb = (0x00,0x00,0x9d)
+    (111,107,107)     # rgb = (0x6f,0x6b,0x6b)
+    (234, 14, 14)     # rgb = (0xea,0x0e,0x0e)
+    ( 72, 72, 72)     # rgb = (0x48,0x48,0x48)
+    (  0,188,  0)     # rgb = (0x00,0xbc,0x00)
+    ( 52,102, 52)     # rgb = (0x34,0x66,0x34)
+    (  2,  2,245)     # rgb = (0x02,0x02,0xf5)
+    ( 83, 83, 96)     # rgb = (0x53,0x53,0x60)
+    (  0,176,  0)     # rgb = (0x00,0xb0,0x00)
+    (  0,174,  0)     # rgb = (0x00,0xae,0x00)
+    (183,  0,  0)     # rgb = (0xb7,0x00,0x00)
+    (  0,164,  0)     # rgb = (0x00,0xa4,0x00)
+    (239,239,239)     # rgb = (0xef,0xef,0xef)
+    (  0,162,  0)     # rgb = (0x00,0xa2,0x00)
+    (143, 79, 79)     # rgb = (0x8f,0x4f,0x4f)
+    (149, 52, 52)     # rgb = (0x95,0x34,0x34)
+    (  0,152,  0)     # rgb = (0x00,0x98,0x00)
+    (  0,150,  0)     # rgb = (0x00,0x96,0x00)
+    (  0,146,  0)     # rgb = (0x00,0x92,0x00)
+    (231,231,231)     # rgb = (0xe7,0xe7,0xe7)
+    (  0,140,  0)     # rgb = (0x00,0x8c,0x00)
+    (227,227,227)     # rgb = (0xe3,0xe3,0xe3) grey89
+    (  0,128,  0)     # rgb = (0x00,0x80,0x00)
+    (146,  6,  6)     # rgb = (0x92,0x06,0x06)
+    (  1,  1,111)     # rgb = (0x01,0x01,0x6f)
+    (100, 86, 89)     # rgb = (0x64,0x56,0x59)
+    (  0,  0,100)     # rgb = (0x00,0x00,0x64)
+    ( 78, 78,107)     # rgb = (0x4e,0x4e,0x6b)
+    (207,207,207)     # rgb = (0xcf,0xcf,0xcf) grey81
+    (221,221,224)     # rgb = (0xdd,0xdd,0xe0)
+    (  0,  0,123)     # rgb = (0x00,0x00,0x7b)
+    (201,201,201)     # rgb = (0xc9,0xc9,0xc9) grey79
+    ( 22, 22, 65)     # rgb = (0x16,0x16,0x41)
+    ( 33, 33, 89)     # rgb = (0x21,0x21,0x59)
+    ( 87, 87, 89)     # rgb = (0x57,0x57,0x59)
+    ( 68, 68,120)     # rgb = (0x44,0x44,0x78)
+    (191,191,191)     # rgb = (0xbf,0xbf,0xbf) grey75
+    (235,221,221)     # rgb = (0xeb,0xdd,0xdd)
+    ( 45, 45, 84)     # rgb = (0x2d,0x2d,0x54)
+    ( 10, 10, 96)     # rgb = (0x0a,0x0a,0x60)
+    (  0,  0,255)     # rgb = (0x00,0x00,0xff) blue1
+    (191,125,125)     # rgb = (0xbf,0x7d,0x7d)
+    (255,255,  0)     # rgb = (0xff,0xff,0x00) yellow1
+}
+bKGD {index: 245}
+tRNS {
+ 0}
+IMAGE {
+    pixels hex
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000e0ea66000000000000000000000000000000
+0000000000000000000000de02a336e43903f4f0000000000000000000000000
+000000000000000069ef1a358680062eb017b0ab7af459500000000000000000
+0000000000667c0ea9cc803979937917a03a878787b0e2ae8ae75c0000000000
+00005cea8ea72c8639e293208f7d7d19200639a017ab2ee4ac2ca7097c690000
+00007823a72b2bda198fd54ddad90521219191217d1917cc2b2b2b2baf8e0000
+0000e81f9b9f27014d05d91c2a2a2a7f037ecdcd7e7a012a2a2aaab7c2ef0000
+00006c9f229d981a23282828282828282828282828282828a7b445c3c8de0000
+00005ca249d63d140f139f272727272727272727a5a528af44c3c8ce43000000
+0000009a62ca41a6960e0d941da4a4a4a4a4a4a4a4a9b732525a1084a1000000
+000000965b58b53811940d0b090b1823a3a3252ab4d24c269957571088000000
+000000946162b9b59c0f14b12d0c8b8c98a3afb8ed1bbd82ba74300877000000
+00000088c565c7b5a6962dcf67be07048aa5b84315f326ba7395832950000000
+00000002bed8d4b94214b1c7dbb68c8b04a843e6d1bd814bceeb10a900000000
+0000007b47636ec441b23d4edb3f09078bac4315f340ec855a82995f00000000
+00000059bb63e15d42643dca6b3f8e090735ed76bd81c05224e9f27b00000000
+0000006cbbd47161c1684951dc3f908e8c3ceef38d08ebe96d6d086000000000
+00000050bf67dc54534fdd53ddb20d0b8eb815d10af1732fe312e60000000000
+00000000add6d6bf61c16f566eb20e0d924475bd578572c61e6d340000000000
+0000000016d8d3d03ec76bcfdf3b0f0e13bc4c8d2f84c040cb837b0000000000
+00000000550c47b3365bd45d6f33110f1a4575cbf2c0521e0802000000000000
+000000000000e7ac36be625e7031131122455a0a2f0a99c6e700000000000000
+000000000000006a9e37d36270331613a545f181e53032e80000000000000000
+00000000000000005088c5d371311816a8464b7374ee89000000000000000000
+0000000000000000000077b654a29b18acc24a722a5500000000000000000000
+0000000000000000000000d78a9f9e9b3548c38ac90000000000000000000000
+00000000000000000000000000ef1f9e3cc20200000000000000000000000000
+0000000000000000000000000000e89736780000000000000000000000000000
+00000000000000000000000000000060e0000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+}
diff --git a/src/image/png/testdata/pngsuite/ftp0n0g08.png b/src/image/png/testdata/pngsuite/ftp0n0g08.png
new file mode 100644 (file)
index 0000000..333465f
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftp0n0g08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftp0n0g08.sng b/src/image/png/testdata/pngsuite/ftp0n0g08.sng
new file mode 100644 (file)
index 0000000..c8abd33
--- /dev/null
@@ -0,0 +1,41 @@
+#SNG: from ftp0n0g08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using grayscale;
+}
+gAMA {1.0000}
+IMAGE {
+    pixels hex
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7fe3c9f17f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7fe8b57e655a4661a1e17f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7feebf8967614d362a2824282f5091d4fc7f7f7f7f7f7f7f7f
+7f7f7f7f7ff2c495726c533e2e302c272b3d23181b28306ca0cff87f7f7f7f7f
+7f7ff7ca9a76736649313033353c3e38313c4533272d2b5a6e73769bc4ee7f7f
+7f7fcc7f7675754e3736373c55645042444845423e38266c757575756a9a7f7f
+7f7fdc8588847b6344476276777777726157524e4b4e63777777705c52bd7f7f
+7f7fea8481878e897f797979797979797979797979797979766354504ce67f7f
+7f7ff88268627890938f837b7b7b7b7b7b7b7b7b7a7a796a57504c49597f7f7f
+7f7f7f8a69748e8f92959794877c7c7c7c7c7c7c7c715b3314182d46827f7f7f
+7f7f7f92696f8f8f919497999b998b7f7e7e7d7762542517110c0c2fac7f7f7f
+7f7f7f946769848f9093937a7f979e9c8e7e6a5a572d1b120d080b24d67f7f7f
+7f7f7fa46764758f8f92836e636e9d9fa07a5a593e1d160d1a0d143efb7f7f7f
+7f7f7fb6665f658a8e907e765a6e9c9e9f745953201b0f3a481a30727f7f7f7f
+7f7f7fc76468537b8e7a757559709b9d9e6e593a1d132b442212119d7f7f7f7f
+7f7f7fd86368486c8d5b7474586f9a9b9d6757231b103717120e16c77f7f7f7f
+7f7f7fea61654e5d816268725870989a9c61491d15221c0e0c0c23f47f7f7f7f
+7f7f7ffc6063575871735771547497999a5a391c0f331c0d0d12517f7f7f7f7f
+7f7f7f7f6e606055697c51705373959796572c190c402b17140c877f7f7f7f7f
+7f7f7f7f8c5f67516876586e527193958f5622150e4735121212c57f7f7f7f7f
+7f7f7f7ffaa363636769666c5175919389551c121139151420b67f7f7f7f7f7f
+7f7f7f7f7f7fd06d6566686b50758f918155210f0c101025ce7f7f7f7f7f7f7f
+7f7f7f7f7f7f7fec8666676950738d8f7a542f0e0b0b31e07f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7ffcaa67674f738b8d74533d1b134ced7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7fd472587f888b6d524f3777fa7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7fefa0838688675150a0fd7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7ffec085866152b77f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7fde9065cc7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7ff5e37f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+}
diff --git a/src/image/png/testdata/pngsuite/ftp0n2c08.png b/src/image/png/testdata/pngsuite/ftp0n2c08.png
new file mode 100644 (file)
index 0000000..fc6e42c
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftp0n2c08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftp0n2c08.sng b/src/image/png/testdata/pngsuite/ftp0n2c08.sng
new file mode 100644 (file)
index 0000000..d41c7eb
--- /dev/null
@@ -0,0 +1,41 @@
+#SNG: from ftp0n2c08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color;
+}
+gAMA {1.0000}
+IMAGE {
+    pixels hex
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f e3e3e3 c9c9c9 f1f1f1 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f e8e8e8 b5b5b5 7e7e7e 656565 6e5252 7e2e2e a64343 c79090 ebdddd 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f eeeeee bfbfbf 898989 676767 6b5d5d 7a3939 8a1212 8d0000 850000 770000 840000 9a0101 a22d2d bf7d7d ddd0d0 fcfcfc 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f f2f2f2 c4c4c4 959595 727272 6f6b6b 774444 871e1e 950101 9f0000 910000 800000 720c0c 612d2d 530e0e 500000 590000 850000 920606 7a6666 a0a0a0 cfcfcf f8f8f8 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f f7f7f7 cacaca 9a9a9a 767676 737373 7c5d5d 872e2e 930707 9e0000 a90000 b00000 c90000 cf0000 b90000 a20101 8c1919 852a2a 7f1313 810000 960000 8f0000 6b5353 6e6e6e 737373 767676 9b9b9b c4c4c4 eeeeee 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f cccccc 7f7f7f 767676 757575 757575 962f2f b80000 b40000 b60000 ad0c0c 943a3a 925050 b92323 d60202 e20000 ef0000 e70000 da0000 cf0000 ba0000 7d0101 6f6b6b 757575 757575 757575 757575 6a6a6a 9a9a9a 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f dcdcdc 858585 888888 848484 7b7b7b 855454 b71313 a91d1d 8d4f4f 787575 777777 777777 777777 816b6b aa4141 d62020 ec1010 e90c0c d01212 a52828 7b5858 777777 777777 777777 707070 5c5c5c 525252 bdbdbd 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f eaeaea 848484 818181 858885 8e8e8e 898989 7f7f7f 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 797979 767676 636363 545454 505050 4c4c4c e6e6e6 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f f8f8f8 7f847f 259725 04a504 39a439 8b948b 939393 8f8f8f 838383 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7b7b7b 7a7a7a 7a7a7a 797979 6a6a6a 575757 505050 4c4c4c 494949 595959 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 8a8a8a 01b301 00c600 00f200 59b659 929292 959595 979797 949494 878787 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 7c7c7c 717171 5a5a60 282885 040493 0c0c78 282858 46464a 828282 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 929292 0cab0c 00bd00 00f400 20dd20 919191 949494 979797 999999 9b9b9b 999999 8b8b8b 7f7f7f 7e7e7e 7e7e7e 7d7d7d 777777 626262 535360 1212be 0000cc 000092 000069 000067 2a2a55 acacac 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 949494 16a116 00b400 00e200 00f400 76a276 939393 8d978d 469e46 46a746 8e9e8e 9e9e9e 9c9c9c 8e8e8e 7e7e7e 6a6a6a 5a5a5a 57575a 1818cd 0000f0 0000a0 020260 01013d 000061 1d1d59 d6d6d6 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f a4a4a4 219821 00aa00 00c800 00f400 3bca3b 929292 4aac4a 00bc00 00a900 2f9a2f 9d9d9d 9f9f9f a0a0a0 7a7a7a 5a5a5a 595959 3131a1 0000ff 0000c6 03035b 191924 0c0c15 0c0c55 3b3b53 fbfbfb 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f b6b6b6 2b8f2b 00a200 00ad00 00eb00 07ed07 899589 43a743 00c900 009900 389538 9c9c9c 9e9e9e 9f9f9f 747474 595959 505067 0505f5 0000f0 030370 383846 484848 161639 2b2b55 727272 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f c7c7c7 348634 00b100 008d00 00d200 00f300 4c9b4c 3b9e3b 00c700 009800 3d943d 9b9b9b 9d9d9d 9e9e9e 6e6e6e 595959 2b2bad 0000ff 0000a6 252559 43434f 16167e 00009f 01018e 9c9ca1 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f d8d8d8 3e7d3e 00b100 007b00 00b800 00f100 178b17 3b9c3b 00c600 009700 3d933d 9a9a9a 9b9b9b 9d9d9d 676767 575759 0909ee 0000f0 04046b 33335a 070790 00009e 00007c 0d0d5d c7c7c7 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f eaeaea 477447 00ad00 008500 099809 00dc00 00a700 239823 00c300 009600 3f923f 989898 9a9a9a 9c9c9c 616161 42427f 0000ff 0000b9 1a1a5d 161649 00007b 00006b 00006b 1c1c56 f4f4f4 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f fcfcfc 506c50 00a900 009500 2d772d 00c100 00c500 019301 00c100 009000 4b914b 979797 999999 9a9a9a 5a5a5a 2b2ba4 0000f6 000086 2f2f53 191930 020263 000073 00009b 4d4d70 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 687368 00a400 00a400 3e653e 14a514 00d400 008b00 00bf00 008e00 4a904a 959595 979797 969696 575757 1a1ab5 0000de 000068 3f3f4b 2b2b2b 0c0c6d 0000b3 00006b 868692 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 8c8c8c 059e05 00b000 346634 408540 00ca00 009700 00bc00 008c00 498e49 939393 959595 8f8f8f 565656 0f0fb7 0000b9 030366 474747 2f2f64 0000a2 00009d 090958 c5c5c5 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f fafafa 90b090 348534 616461 636a63 06af06 00ae00 00b900 008b00 538d53 919191 939393 898989 555555 0a0aa8 00009d 070763 34345c 04049b 0000b1 1a1a4d b5b5bb 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f d0d0d0 6d6d6d 656565 2d8f2d 00b200 00b600 008900 558b55 8f8f8f 919191 818181 555555 15157e 000084 010165 010184 000091 1c1c6e ceced0 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f ececec 868686 587058 00af00 00b300 008800 538953 8d8d8d 8f8f8f 7a7a7a 545454 2c2c49 02026b 000064 000063 292974 dfdfe5 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f fcfcfc aaaaaa 219821 00b000 008600 578757 8b8b8b 8d8d8d 747474 535353 3d3d3d 1a1a23 0d0d43 474772 ededef 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f d1d6d1 389b38 2d772d 7d817d 888888 8b8b8b 6d6d6d 525252 4f4f4f 373737 777777 fafafa 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f efefef a0a0a0 838383 868686 888888 676767 515151 505050 a0a0a0 fdfdfd 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f fefefe c0c0c0 858585 868686 616161 525252 b7b7b7 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f dedede 909090 656565 cccccc 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f f5f5f5 e3e3e3 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 7f7f7f 
+}
diff --git a/src/image/png/testdata/pngsuite/ftp0n3p08.png b/src/image/png/testdata/pngsuite/ftp0n3p08.png
new file mode 100644 (file)
index 0000000..69a69e5
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftp0n3p08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftp0n3p08.sng b/src/image/png/testdata/pngsuite/ftp0n3p08.sng
new file mode 100644 (file)
index 0000000..f1f8448
--- /dev/null
@@ -0,0 +1,288 @@
+#SNG: from ftp0n3p08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color palette;
+}
+gAMA {1.0000}
+PLTE {
+    ( 20, 20,109)     # rgb = (0x14,0x14,0x6d)
+    (128, 86, 86)     # rgb = (0x80,0x56,0x56)
+    (181,181,184)     # rgb = (0xb5,0xb5,0xb8)
+    (168, 66, 66)     # rgb = (0xa8,0x42,0x42)
+    (159,159,159)     # rgb = (0x9f,0x9f,0x9f)
+    (177, 32, 32)     # rgb = (0xb1,0x20,0x20)
+    (139, 21, 21)     # rgb = (0x8b,0x15,0x15)
+    (157,157,157)     # rgb = (0x9d,0x9d,0x9d)
+    ( 27, 27, 89)     # rgb = (0x1b,0x1b,0x59)
+    (155,155,155)     # rgb = (0x9b,0x9b,0x9b)
+    (  0,  0,132)     # rgb = (0x00,0x00,0x84)
+    (153,153,153)     # rgb = (0x99,0x99,0x99) grey60
+    (143,167,143)     # rgb = (0x8f,0xa7,0x8f)
+    (151,151,151)     # rgb = (0x97,0x97,0x97)
+    (149,149,149)     # rgb = (0x95,0x95,0x95)
+    (147,147,147)     # rgb = (0x93,0x93,0x93)
+    ( 41, 41, 86)     # rgb = (0x29,0x29,0x56)
+    (145,145,145)     # rgb = (0x91,0x91,0x91) grey57
+    (  0,  0,155)     # rgb = (0x00,0x00,0x9b)
+    (143,143,143)     # rgb = (0x8f,0x8f,0x8f) grey56
+    (139,149,139)     # rgb = (0x8b,0x95,0x8b)
+    ( 46, 46,167)     # rgb = (0x2e,0x2e,0xa7)
+    (141,141,141)     # rgb = (0x8d,0x8d,0x8d)
+    (128,  0,  0)     # rgb = (0x80,0x00,0x00)
+    (139,139,139)     # rgb = (0x8b,0x8b,0x8b)
+    (185,  0,  0)     # rgb = (0xb9,0x00,0x00)
+    (137,137,137)     # rgb = (0x89,0x89,0x89)
+    ( 12, 12,213)     # rgb = (0x0c,0x0c,0xd5)
+    (120,117,117)     # rgb = (0x78,0x75,0x75)
+    (135,135,135)     # rgb = (0x87,0x87,0x87) grey53
+    (  0,  0,178)     # rgb = (0x00,0x00,0xb2)
+    (133,133,133)     # rgb = (0x85,0x85,0x85) grey52
+    (165,  0,  0)     # rgb = (0xa5,0x00,0x00)
+    (222,  0,  0)     # rgb = (0xde,0x00,0x00)
+    (129,129,129)     # rgb = (0x81,0x81,0x81)
+    (127,127,127)     # rgb = (0x7f,0x7f,0x7f) grey50
+    (  0,  0,158)     # rgb = (0x00,0x00,0x9e)
+    (125,125,125)     # rgb = (0x7d,0x7d,0x7d) grey49
+    (  0,  0,201)     # rgb = (0x00,0x00,0xc9)
+    (123,123,123)     # rgb = (0x7b,0x7b,0x7b)
+    (121,121,121)     # rgb = (0x79,0x79,0x79)
+    ( 55, 55, 86)     # rgb = (0x37,0x37,0x56)
+    (119,119,119)     # rgb = (0x77,0x77,0x77)
+    (117,117,117)     # rgb = (0x75,0x75,0x75) grey46
+    (115,115,115)     # rgb = (0x73,0x73,0x73) grey45
+    ( 72,169, 72)     # rgb = (0x48,0xa9,0x48)
+    (142,  0,  0)     # rgb = (0x8e,0x00,0x00)
+    (  2,  2,100)     # rgb = (0x02,0x02,0x64)
+    (  0,  0, 98)     # rgb = (0x00,0x00,0x62)
+    ( 86,137, 86)     # rgb = (0x56,0x89,0x56)
+    ( 40, 40,124)     # rgb = (0x28,0x28,0x7c)
+    ( 83,139, 83)     # rgb = (0x53,0x8b,0x53)
+    (137,137,143)     # rgb = (0x89,0x89,0x8f)
+    (103,103,103)     # rgb = (0x67,0x67,0x67)
+    (101,101,101)     # rgb = (0x65,0x65,0x65)
+    ( 93,109, 93)     # rgb = (0x5d,0x6d,0x5d)
+    ( 19,229, 19)     # rgb = (0x13,0xe5,0x13)
+    (134, 38, 38)     # rgb = (0x86,0x26,0x26)
+    (111, 45, 45)     # rgb = (0x6f,0x2d,0x2d)
+    ( 68,145, 68)     # rgb = (0x44,0x91,0x44)
+    ( 97, 97, 97)     # rgb = (0x61,0x61,0x61) grey38
+    ( 59,157, 59)     # rgb = (0x3b,0x9d,0x3b)
+    ( 68,137, 68)     # rgb = (0x44,0x89,0x44)
+    ( 61,147, 61)     # rgb = (0x3d,0x93,0x3d)
+    (  0,  0,164)     # rgb = (0x00,0x00,0xa4)
+    (  0,243,  0)     # rgb = (0x00,0xf3,0x00)
+    (  0,241,  0)     # rgb = (0x00,0xf1,0x00)
+    ( 89, 89, 89)     # rgb = (0x59,0x59,0x59) grey35
+    ( 87, 87, 87)     # rgb = (0x57,0x57,0x57) grey34
+    ( 85, 85, 85)     # rgb = (0x55,0x55,0x55)
+    ( 83, 83, 83)     # rgb = (0x53,0x53,0x53)
+    ( 52,133, 52)     # rgb = (0x34,0x85,0x34)
+    ( 81, 81, 81)     # rgb = (0x51,0x51,0x51)
+    ( 36,151, 36)     # rgb = (0x24,0x97,0x24)
+    ( 79, 79, 79)     # rgb = (0x4f,0x4f,0x4f) grey31
+    ( 58, 58, 65)     # rgb = (0x3a,0x3a,0x41)
+    ( 16, 16,186)     # rgb = (0x10,0x10,0xba)
+    (178, 15, 15)     # rgb = (0xb2,0x0f,0x0f)
+    (  0,199,  0)     # rgb = (0x00,0xc7,0x00)
+    (  0,197,  0)     # rgb = (0x00,0xc5,0x00)
+    (252,252,252)     # rgb = (0xfc,0xfc,0xfc) grey99
+    (  0,195,  0)     # rgb = (0x00,0xc3,0x00)
+    (  4,  4,151)     # rgb = (0x04,0x04,0x97)
+    (  0,193,  0)     # rgb = (0x00,0xc1,0x00)
+    ( 45,119, 45)     # rgb = (0x2d,0x77,0x2d)
+    (250,250,250)     # rgb = (0xfa,0xfa,0xfa) grey98
+    (  0,191,  0)     # rgb = (0x00,0xbf,0x00)
+    (  0,  0,104)     # rgb = (0x00,0x00,0x68)
+    (  0,189,  0)     # rgb = (0x00,0xbd,0x00)
+    (218,212,212)     # rgb = (0xda,0xd4,0xd4)
+    ( 16, 16,123)     # rgb = (0x10,0x10,0x7b)
+    (  9,173,  9)     # rgb = (0x09,0xad,0x09)
+    (248,248,248)     # rgb = (0xf8,0xf8,0xf8)
+    (  0,185,  0)     # rgb = (0x00,0xb9,0x00)
+    (  0,183,  0)     # rgb = (0x00,0xb7,0x00)
+    (156,156,161)     # rgb = (0x9c,0x9c,0xa1)
+    (246,246,246)     # rgb = (0xf6,0xf6,0xf6)
+    ( 12,161, 12)     # rgb = (0x0c,0xa1,0x0c)
+    (  0,179,  0)     # rgb = (0x00,0xb3,0x00)
+    (  0,177,  0)     # rgb = (0x00,0xb1,0x00)
+    ( 16,145, 16)     # rgb = (0x10,0x91,0x10)
+    (  0,171,  0)     # rgb = (0x00,0xab,0x00)
+    (242,242,242)     # rgb = (0xf2,0xf2,0xf2) grey95
+    (  0,169,  0)     # rgb = (0x00,0xa9,0x00)
+    (  0,167,  0)     # rgb = (0x00,0xa7,0x00)
+    (238,238,238)     # rgb = (0xee,0xee,0xee)
+    (236,236,236)     # rgb = (0xec,0xec,0xec)
+    (  0,151,  0)     # rgb = (0x00,0x97,0x00)
+    (234,234,234)     # rgb = (0xea,0xea,0xea)
+    (  0,  0,107)     # rgb = (0x00,0x00,0x6b)
+    (  0,141,  0)     # rgb = (0x00,0x8d,0x00)
+    (  0,139,  0)     # rgb = (0x00,0x8b,0x00) green4
+    (  0,137,  0)     # rgb = (0x00,0x89,0x00)
+    (  0,135,  0)     # rgb = (0x00,0x87,0x00)
+    ( 49, 49, 49)     # rgb = (0x31,0x31,0x31)
+    ( 25, 25, 42)     # rgb = (0x19,0x19,0x2a)
+    (  7,  7, 64)     # rgb = (0x07,0x07,0x40)
+    ( 18, 18,174)     # rgb = (0x12,0x12,0xae)
+    (  9,  9,238)     # rgb = (0x09,0x09,0xee)
+    (211,214,211)     # rgb = (0xd3,0xd6,0xd3)
+    (204,204,204)     # rgb = (0xcc,0xcc,0xcc) grey80
+    (147,  0,  0)     # rgb = (0x93,0x00,0x00)
+    (163, 42, 42)     # rgb = (0xa3,0x2a,0x2a)
+    (198,198,198)     # rgb = (0xc6,0xc6,0xc6)
+    (196,196,196)     # rgb = (0xc4,0xc4,0xc4) grey77
+    (204,  0,  0)     # rgb = (0xcc,0x00,0x00)
+    (211, 10, 10)     # rgb = (0xd3,0x0a,0x0a)
+    (129,107,107)     # rgb = (0x81,0x6b,0x6b)
+    (120, 62, 62)     # rgb = (0x78,0x3e,0x3e)
+    (  3,  3,109)     # rgb = (0x03,0x03,0x6d)
+    (  0,  0,159)     # rgb = (0x00,0x00,0x9f)
+    ( 10, 10, 86)     # rgb = (0x0a,0x0a,0x56)
+    ( 70, 70, 72)     # rgb = (0x46,0x46,0x48)
+    ( 65, 65, 77)     # rgb = (0x41,0x41,0x4d)
+    (115, 93, 93)     # rgb = (0x73,0x5d,0x5d)
+    ( 81,  7,  7)     # rgb = (0x51,0x07,0x07)
+    (168,168,168)     # rgb = (0xa8,0xa8,0xa8) grey66
+    (237,237,239)     # rgb = (0xed,0xed,0xef)
+    (160,160,160)     # rgb = (0xa0,0xa0,0xa0)
+    (158,158,158)     # rgb = (0x9e,0x9e,0x9e) grey62
+    (156,156,156)     # rgb = (0x9c,0x9c,0x9c) grey61
+    (  0,  0,185)     # rgb = (0x00,0x00,0xb9)
+    (154,154,154)     # rgb = (0x9a,0x9a,0x9a)
+    (178,  0,  0)     # rgb = (0xb2,0x00,0x00)
+    (152,152,152)     # rgb = (0x98,0x98,0x98)
+    (235,  0,  0)     # rgb = (0xeb,0x00,0x00)
+    (150,150,150)     # rgb = (0x96,0x96,0x96) grey59
+    (158,  0,  0)     # rgb = (0x9e,0x00,0x00)
+    (148,148,148)     # rgb = (0x94,0x94,0x94) grey58
+    ( 19, 19, 28)     # rgb = (0x13,0x13,0x1c)
+    (146,146,146)     # rgb = (0x92,0x92,0x92)
+    (144,144,144)     # rgb = (0x90,0x90,0x90)
+    (142,142,142)     # rgb = (0x8e,0x8e,0x8e)
+    (  0,  0,145)     # rgb = (0x00,0x00,0x91)
+    (138,138,138)     # rgb = (0x8a,0x8a,0x8a) grey54
+    (136,136,136)     # rgb = (0x88,0x88,0x88)
+    (118,162,118)     # rgb = (0x76,0xa2,0x76)
+    (133,136,133)     # rgb = (0x85,0x88,0x85)
+    (134,134,134)     # rgb = (0x86,0x86,0x86)
+    (132,132,132)     # rgb = (0x84,0x84,0x84)
+    (120, 15, 15)     # rgb = (0x78,0x0f,0x0f)
+    (130,130,130)     # rgb = (0x82,0x82,0x82) grey51
+    (126,130,126)     # rgb = (0x7e,0x82,0x7e)
+    (126,126,126)     # rgb = (0x7e,0x7e,0x7e)
+    (124,124,124)     # rgb = (0x7c,0x7c,0x7c)
+    (122,122,122)     # rgb = (0x7a,0x7a,0x7a) grey48
+    ( 74,192, 74)     # rgb = (0x4a,0xc0,0x4a)
+    (118,118,118)     # rgb = (0x76,0x76,0x76)
+    (116,116,116)     # rgb = (0x74,0x74,0x74)
+    (114,114,114)     # rgb = (0x72,0x72,0x72)
+    (112,112,112)     # rgb = (0x70,0x70,0x70) grey44
+    (152,  0,  0)     # rgb = (0x98,0x00,0x00)
+    (110,110,110)     # rgb = (0x6e,0x6e,0x6e) grey43
+    (106,112,106)     # rgb = (0x6a,0x70,0x6a)
+    (122,102,102)     # rgb = (0x7a,0x66,0x66)
+    (106,106,106)     # rgb = (0x6a,0x6a,0x6a)
+    (132,  0,  0)     # rgb = (0x84,0x00,0x00)
+    ( 68,162, 68)     # rgb = (0x44,0xa2,0x44)
+    ( 75,150, 75)     # rgb = (0x4b,0x96,0x4b)
+    ( 97,100, 97)     # rgb = (0x61,0x64,0x61)
+    ( 98, 98, 98)     # rgb = (0x62,0x62,0x62)
+    (  0,244,  0)     # rgb = (0x00,0xf4,0x00)
+    ( 56,152, 56)     # rgb = (0x38,0x98,0x38)
+    ( 92, 92, 92)     # rgb = (0x5c,0x5c,0x5c) grey36
+    ( 90, 90, 90)     # rgb = (0x5a,0x5a,0x5a)
+    (  0,230,  0)     # rgb = (0x00,0xe6,0x00)
+    (  2,  2, 93)     # rgb = (0x02,0x02,0x5d)
+    ( 66,120, 66)     # rgb = (0x42,0x78,0x42)
+    ( 86, 86, 86)     # rgb = (0x56,0x56,0x56)
+    (  0,  0,240)     # rgb = (0x00,0x00,0xf0)
+    ( 46,148, 46)     # rgb = (0x2e,0x94,0x2e)
+    ( 71,104, 71)     # rgb = (0x47,0x68,0x47)
+    ( 49, 49, 96)     # rgb = (0x31,0x31,0x60)
+    (  0,216,  0)     # rgb = (0x00,0xd8,0x00)
+    ( 82, 82, 82)     # rgb = (0x52,0x52,0x52) grey32
+    ( 80, 80, 80)     # rgb = (0x50,0x50,0x50)
+    (  0,206,  0)     # rgb = (0x00,0xce,0x00)
+    ( 33,152, 33)     # rgb = (0x21,0x98,0x21)
+    (255,255,255)     # rgb = (0xff,0xff,0xff) grey100
+    (  0,200,  0)     # rgb = (0x00,0xc8,0x00)
+    ( 76, 76, 76)     # rgb = (0x4c,0x4c,0x4c)
+    (253,253,253)     # rgb = (0xfd,0xfd,0xfd)
+    (  0,198,  0)     # rgb = (0x00,0xc6,0x00)
+    (  0,  0,157)     # rgb = (0x00,0x00,0x9d)
+    (111,107,107)     # rgb = (0x6f,0x6b,0x6b)
+    (234, 14, 14)     # rgb = (0xea,0x0e,0x0e)
+    ( 72, 72, 72)     # rgb = (0x48,0x48,0x48)
+    (  0,188,  0)     # rgb = (0x00,0xbc,0x00)
+    ( 52,102, 52)     # rgb = (0x34,0x66,0x34)
+    (  2,  2,245)     # rgb = (0x02,0x02,0xf5)
+    ( 83, 83, 96)     # rgb = (0x53,0x53,0x60)
+    (  0,176,  0)     # rgb = (0x00,0xb0,0x00)
+    (  0,174,  0)     # rgb = (0x00,0xae,0x00)
+    (183,  0,  0)     # rgb = (0xb7,0x00,0x00)
+    (  0,164,  0)     # rgb = (0x00,0xa4,0x00)
+    (239,239,239)     # rgb = (0xef,0xef,0xef)
+    (  0,162,  0)     # rgb = (0x00,0xa2,0x00)
+    (143, 79, 79)     # rgb = (0x8f,0x4f,0x4f)
+    (149, 52, 52)     # rgb = (0x95,0x34,0x34)
+    (  0,152,  0)     # rgb = (0x00,0x98,0x00)
+    (  0,150,  0)     # rgb = (0x00,0x96,0x00)
+    (  0,146,  0)     # rgb = (0x00,0x92,0x00)
+    (231,231,231)     # rgb = (0xe7,0xe7,0xe7)
+    (  0,140,  0)     # rgb = (0x00,0x8c,0x00)
+    (227,227,227)     # rgb = (0xe3,0xe3,0xe3) grey89
+    (  0,128,  0)     # rgb = (0x00,0x80,0x00)
+    (146,  6,  6)     # rgb = (0x92,0x06,0x06)
+    (  1,  1,111)     # rgb = (0x01,0x01,0x6f)
+    (100, 86, 89)     # rgb = (0x64,0x56,0x59)
+    (  0,  0,100)     # rgb = (0x00,0x00,0x64)
+    ( 78, 78,107)     # rgb = (0x4e,0x4e,0x6b)
+    (207,207,207)     # rgb = (0xcf,0xcf,0xcf) grey81
+    (221,221,224)     # rgb = (0xdd,0xdd,0xe0)
+    (  0,  0,123)     # rgb = (0x00,0x00,0x7b)
+    (201,201,201)     # rgb = (0xc9,0xc9,0xc9) grey79
+    ( 22, 22, 65)     # rgb = (0x16,0x16,0x41)
+    ( 33, 33, 89)     # rgb = (0x21,0x21,0x59)
+    ( 87, 87, 89)     # rgb = (0x57,0x57,0x59)
+    ( 68, 68,120)     # rgb = (0x44,0x44,0x78)
+    (191,191,191)     # rgb = (0xbf,0xbf,0xbf) grey75
+    (235,221,221)     # rgb = (0xeb,0xdd,0xdd)
+    ( 45, 45, 84)     # rgb = (0x2d,0x2d,0x54)
+    ( 10, 10, 96)     # rgb = (0x0a,0x0a,0x60)
+    (  0,  0,255)     # rgb = (0x00,0x00,0xff) blue1
+    (191,125,125)     # rgb = (0xbf,0x7d,0x7d)
+}
+IMAGE {
+    pixels hex
+2323232323232323232323232323232323232323232323232323232323232323
+2323232323232323232323232323232323232323232323232323232323232323
+2323232323232323232323232323e0ea66232323232323232323232323232323
+2323232323232323232323de02a336e43903f4f0232323232323232323232323
+232323232323232369ef1a358680062eb017b0ab7af459502323232323232323
+2323232323667c0ea9cc803979937917a03a878787b0e2ae8ae75c2323232323
+23235cea8ea72c8639e293208f7d7d19200639a017ab2ee4ac2ca7097c692323
+23237823a72b2bda198fd54ddad90521219191217d1917cc2b2b2b2baf8e2323
+2323e81f9b9f27014d05d91c2a2a2a7f037ecdcd7e7a012a2a2aaab7c2ef2323
+23236c9f229d981a23282828282828282828282828282828a7b445c3c8de2323
+23235ca249d63d140f139f272727272727272727a5a528af44c3c8ce43232323
+2323239a62ca41a6960e0d941da4a4a4a4a4a4a4a4a9b732525a1084a1232323
+232323965b58b53811940d0b090b1823a3a3252ab4d24c269957571088232323
+232323946162b9b59c0f14b12d0c8b8c98a3afb8ed1bbd82ba74300877232323
+23232388c565c7b5a6962dcf67be07048aa5b84315f326ba7395832950232323
+23232302bed8d4b94214b1c7dbb68c8b04a843e6d1bd814bceeb10a923232323
+2323237b47636ec441b23d4edb3f09078bac4315f340ec855a82995f23232323
+23232359bb63e15d42643dca6b3f8e090735ed76bd81c05224e9f27b23232323
+2323236cbbd47161c1684951dc3f908e8c3ceef38d08ebe96d6d086023232323
+23232350bf67dc54534fdd53ddb20d0b8eb815d10af1732fe312e62323232323
+23232323add6d6bf61c16f566eb20e0d924475bd578572001e6d342323232323
+2323232316d8d3d03ec76bcfdf3b0f0e13bc4c8d2f84c040cb837b2323232323
+23232323550c47b3365bd45d6f33110f1a4575cbf2c0521e0802232323232323
+232323232323e7ac36be625e7031131122455a0a2f0a9900e723232323232323
+232323232323236a9e37d36270331613a545f181e53032e82323232323232323
+23232323232323235088c5d371311816a8464b7374ee89232323232323232323
+2323232323232323232377b654a29b18acc24a722a5523232323232323232323
+2323232323232323232323d78a9f9e9b3548c38ac92323232323232323232323
+232323232323232323232323c6ef1f9e3cc20223232323232323232323232323
+2323232323232323232323232323e89736782323232323232323232323232323
+23232323232323232323232323232360e0232323232323232323232323232323
+2323232323232323232323232323232323232323232323232323232323232323
+}
diff --git a/src/image/png/testdata/pngsuite/ftp1n3p08.png b/src/image/png/testdata/pngsuite/ftp1n3p08.png
new file mode 100644 (file)
index 0000000..a6c9f35
Binary files /dev/null and b/src/image/png/testdata/pngsuite/ftp1n3p08.png differ
diff --git a/src/image/png/testdata/pngsuite/ftp1n3p08.sng b/src/image/png/testdata/pngsuite/ftp1n3p08.sng
new file mode 100644 (file)
index 0000000..2d179e2
--- /dev/null
@@ -0,0 +1,290 @@
+#SNG: from ftp1n3p08.png
+IHDR {
+    width: 32; height: 32; bitdepth: 8;
+    using color palette;
+}
+gAMA {1.0000}
+PLTE {
+    (255,255,255)     # rgb = (0xff,0xff,0xff) grey100
+    (128, 86, 86)     # rgb = (0x80,0x56,0x56)
+    (181,181,184)     # rgb = (0xb5,0xb5,0xb8)
+    (168, 66, 66)     # rgb = (0xa8,0x42,0x42)
+    (159,159,159)     # rgb = (0x9f,0x9f,0x9f)
+    (177, 32, 32)     # rgb = (0xb1,0x20,0x20)
+    (139, 21, 21)     # rgb = (0x8b,0x15,0x15)
+    (157,157,157)     # rgb = (0x9d,0x9d,0x9d)
+    ( 27, 27, 89)     # rgb = (0x1b,0x1b,0x59)
+    (155,155,155)     # rgb = (0x9b,0x9b,0x9b)
+    (  0,  0,132)     # rgb = (0x00,0x00,0x84)
+    (153,153,153)     # rgb = (0x99,0x99,0x99) grey60
+    (143,167,143)     # rgb = (0x8f,0xa7,0x8f)
+    (151,151,151)     # rgb = (0x97,0x97,0x97)
+    (149,149,149)     # rgb = (0x95,0x95,0x95)
+    (147,147,147)     # rgb = (0x93,0x93,0x93)
+    ( 41, 41, 86)     # rgb = (0x29,0x29,0x56)
+    (145,145,145)     # rgb = (0x91,0x91,0x91) grey57
+    (  0,  0,155)     # rgb = (0x00,0x00,0x9b)
+    (143,143,143)     # rgb = (0x8f,0x8f,0x8f) grey56
+    (139,149,139)     # rgb = (0x8b,0x95,0x8b)
+    ( 46, 46,167)     # rgb = (0x2e,0x2e,0xa7)
+    (141,141,141)     # rgb = (0x8d,0x8d,0x8d)
+    (128,  0,  0)     # rgb = (0x80,0x00,0x00)
+    (139,139,139)     # rgb = (0x8b,0x8b,0x8b)
+    (185,  0,  0)     # rgb = (0xb9,0x00,0x00)
+    (137,137,137)     # rgb = (0x89,0x89,0x89)
+    ( 12, 12,213)     # rgb = (0x0c,0x0c,0xd5)
+    (120,117,117)     # rgb = (0x78,0x75,0x75)
+    (135,135,135)     # rgb = (0x87,0x87,0x87) grey53
+    (  0,  0,178)     # rgb = (0x00,0x00,0xb2)
+    (133,133,133)     # rgb = (0x85,0x85,0x85) grey52
+    (165,  0,  0)     # rgb = (0xa5,0x00,0x00)
+    (222,  0,  0)     # rgb = (0xde,0x00,0x00)
+    (129,129,129)     # rgb = (0x81,0x81,0x81)
+    (127,127,127)     # rgb = (0x7f,0x7f,0x7f) grey50
+    (  0,  0,158)     # rgb = (0x00,0x00,0x9e)
+    (125,125,125)     # rgb = (0x7d,0x7d,0x7d) grey49
+    (  0,  0,201)     # rgb = (0x00,0x00,0xc9)
+    (123,123,123)     # rgb = (0x7b,0x7b,0x7b)
+    (121,121,121)     # rgb = (0x79,0x79,0x79)
+    ( 55, 55, 86)     # rgb = (0x37,0x37,0x56)
+    (119,119,119)     # rgb = (0x77,0x77,0x77)
+    (117,117,117)     # rgb = (0x75,0x75,0x75) grey46
+    (115,115,115)     # rgb = (0x73,0x73,0x73) grey45
+    ( 72,169, 72)     # rgb = (0x48,0xa9,0x48)
+    (142,  0,  0)     # rgb = (0x8e,0x00,0x00)
+    (  2,  2,100)     # rgb = (0x02,0x02,0x64)
+    (  0,  0, 98)     # rgb = (0x00,0x00,0x62)
+    ( 86,137, 86)     # rgb = (0x56,0x89,0x56)
+    ( 40, 40,124)     # rgb = (0x28,0x28,0x7c)
+    ( 83,139, 83)     # rgb = (0x53,0x8b,0x53)
+    (137,137,143)     # rgb = (0x89,0x89,0x8f)
+    (103,103,103)     # rgb = (0x67,0x67,0x67)
+    (101,101,101)     # rgb = (0x65,0x65,0x65)
+    ( 93,109, 93)     # rgb = (0x5d,0x6d,0x5d)
+    ( 19,229, 19)     # rgb = (0x13,0xe5,0x13)
+    (134, 38, 38)     # rgb = (0x86,0x26,0x26)
+    (111, 45, 45)     # rgb = (0x6f,0x2d,0x2d)
+    ( 68,145, 68)     # rgb = (0x44,0x91,0x44)
+    ( 97, 97, 97)     # rgb = (0x61,0x61,0x61) grey38
+    ( 59,157, 59)     # rgb = (0x3b,0x9d,0x3b)
+    ( 68,137, 68)     # rgb = (0x44,0x89,0x44)
+    ( 61,147, 61)     # rgb = (0x3d,0x93,0x3d)
+    (  0,  0,164)     # rgb = (0x00,0x00,0xa4)
+    (  0,243,  0)     # rgb = (0x00,0xf3,0x00)
+    (  0,241,  0)     # rgb = (0x00,0xf1,0x00)
+    ( 89, 89, 89)     # rgb = (0x59,0x59,0x59) grey35
+    ( 87, 87, 87)     # rgb = (0x57,0x57,0x57) grey34
+    ( 85, 85, 85)     # rgb = (0x55,0x55,0x55)
+    ( 83, 83, 83)     # rgb = (0x53,0x53,0x53)
+    ( 52,133, 52)     # rgb = (0x34,0x85,0x34)
+    ( 81, 81, 81)     # rgb = (0x51,0x51,0x51)
+    ( 36,151, 36)     # rgb = (0x24,0x97,0x24)
+    ( 79, 79, 79)     # rgb = (0x4f,0x4f,0x4f) grey31
+    ( 58, 58, 65)     # rgb = (0x3a,0x3a,0x41)
+    ( 16, 16,186)     # rgb = (0x10,0x10,0xba)
+    (178, 15, 15)     # rgb = (0xb2,0x0f,0x0f)
+    (  0,199,  0)     # rgb = (0x00,0xc7,0x00)
+    (  0,197,  0)     # rgb = (0x00,0xc5,0x00)
+    (252,252,252)     # rgb = (0xfc,0xfc,0xfc) grey99
+    (  0,195,  0)     # rgb = (0x00,0xc3,0x00)
+    (  4,  4,151)     # rgb = (0x04,0x04,0x97)
+    (  0,193,  0)     # rgb = (0x00,0xc1,0x00)
+    ( 45,119, 45)     # rgb = (0x2d,0x77,0x2d)
+    (250,250,250)     # rgb = (0xfa,0xfa,0xfa) grey98
+    (  0,191,  0)     # rgb = (0x00,0xbf,0x00)
+    (  0,  0,104)     # rgb = (0x00,0x00,0x68)
+    (  0,189,  0)     # rgb = (0x00,0xbd,0x00)
+    (218,212,212)     # rgb = (0xda,0xd4,0xd4)
+    ( 16, 16,123)     # rgb = (0x10,0x10,0x7b)
+    (  9,173,  9)     # rgb = (0x09,0xad,0x09)
+    (248,248,248)     # rgb = (0xf8,0xf8,0xf8)
+    (  0,185,  0)     # rgb = (0x00,0xb9,0x00)
+    (  0,183,  0)     # rgb = (0x00,0xb7,0x00)
+    (156,156,161)     # rgb = (0x9c,0x9c,0xa1)
+    (246,246,246)     # rgb = (0xf6,0xf6,0xf6)
+    ( 12,161, 12)     # rgb = (0x0c,0xa1,0x0c)
+    (  0,179,  0)     # rgb = (0x00,0xb3,0x00)
+    (  0,177,  0)     # rgb = (0x00,0xb1,0x00)
+    ( 16,145, 16)     # rgb = (0x10,0x91,0x10)
+    (  0,171,  0)     # rgb = (0x00,0xab,0x00)
+    (242,242,242)     # rgb = (0xf2,0xf2,0xf2) grey95
+    (  0,169,  0)     # rgb = (0x00,0xa9,0x00)
+    (  0,167,  0)     # rgb = (0x00,0xa7,0x00)
+    (238,238,238)     # rgb = (0xee,0xee,0xee)
+    (236,236,236)     # rgb = (0xec,0xec,0xec)
+    (  0,151,  0)     # rgb = (0x00,0x97,0x00)
+    (234,234,234)     # rgb = (0xea,0xea,0xea)
+    (  0,  0,107)     # rgb = (0x00,0x00,0x6b)
+    (  0,141,  0)     # rgb = (0x00,0x8d,0x00)
+    (  0,139,  0)     # rgb = (0x00,0x8b,0x00) green4
+    (  0,137,  0)     # rgb = (0x00,0x89,0x00)
+    (  0,135,  0)     # rgb = (0x00,0x87,0x00)
+    ( 49, 49, 49)     # rgb = (0x31,0x31,0x31)
+    ( 25, 25, 42)     # rgb = (0x19,0x19,0x2a)
+    (  7,  7, 64)     # rgb = (0x07,0x07,0x40)
+    ( 18, 18,174)     # rgb = (0x12,0x12,0xae)
+    (  9,  9,238)     # rgb = (0x09,0x09,0xee)
+    (211,214,211)     # rgb = (0xd3,0xd6,0xd3)
+    (204,204,204)     # rgb = (0xcc,0xcc,0xcc) grey80
+    (147,  0,  0)     # rgb = (0x93,0x00,0x00)
+    (163, 42, 42)     # rgb = (0xa3,0x2a,0x2a)
+    (198,198,198)     # rgb = (0xc6,0xc6,0xc6)
+    (196,196,196)     # rgb = (0xc4,0xc4,0xc4) grey77
+    (204,  0,  0)     # rgb = (0xcc,0x00,0x00)
+    (211, 10, 10)     # rgb = (0xd3,0x0a,0x0a)
+    (129,107,107)     # rgb = (0x81,0x6b,0x6b)
+    (120, 62, 62)     # rgb = (0x78,0x3e,0x3e)
+    (  3,  3,109)     # rgb = (0x03,0x03,0x6d)
+    (  0,  0,159)     # rgb = (0x00,0x00,0x9f)
+    ( 10, 10, 86)     # rgb = (0x0a,0x0a,0x56)
+    ( 70, 70, 72)     # rgb = (0x46,0x46,0x48)
+    ( 65, 65, 77)     # rgb = (0x41,0x41,0x4d)
+    (115, 93, 93)     # rgb = (0x73,0x5d,0x5d)
+    ( 81,  7,  7)     # rgb = (0x51,0x07,0x07)
+    (168,168,168)     # rgb = (0xa8,0xa8,0xa8) grey66
+    (237,237,239)     # rgb = (0xed,0xed,0xef)
+    (160,160,160)     # rgb = (0xa0,0xa0,0xa0)
+    (158,158,158)     # rgb = (0x9e,0x9e,0x9e) grey62
+    (156,156,156)     # rgb = (0x9c,0x9c,0x9c) grey61
+    (  0,  0,185)     # rgb = (0x00,0x00,0xb9)
+    (154,154,154)     # rgb = (0x9a,0x9a,0x9a)
+    (178,  0,  0)     # rgb = (0xb2,0x00,0x00)
+    (152,152,152)     # rgb = (0x98,0x98,0x98)
+    (235,  0,  0)     # rgb = (0xeb,0x00,0x00)
+    (150,150,150)     # rgb = (0x96,0x96,0x96) grey59
+    (158,  0,  0)     # rgb = (0x9e,0x00,0x00)
+    (148,148,148)     # rgb = (0x94,0x94,0x94) grey58
+    ( 19, 19, 28)     # rgb = (0x13,0x13,0x1c)
+    (146,146,146)     # rgb = (0x92,0x92,0x92)
+    (144,144,144)     # rgb = (0x90,0x90,0x90)
+    (142,142,142)     # rgb = (0x8e,0x8e,0x8e)
+    (  0,  0,145)     # rgb = (0x00,0x00,0x91)
+    (138,138,138)     # rgb = (0x8a,0x8a,0x8a) grey54
+    (136,136,136)     # rgb = (0x88,0x88,0x88)
+    (118,162,118)     # rgb = (0x76,0xa2,0x76)
+    (133,136,133)     # rgb = (0x85,0x88,0x85)
+    (134,134,134)     # rgb = (0x86,0x86,0x86)
+    (132,132,132)     # rgb = (0x84,0x84,0x84)
+    (120, 15, 15)     # rgb = (0x78,0x0f,0x0f)
+    (130,130,130)     # rgb = (0x82,0x82,0x82) grey51
+    (126,130,126)     # rgb = (0x7e,0x82,0x7e)
+    (126,126,126)     # rgb = (0x7e,0x7e,0x7e)
+    (124,124,124)     # rgb = (0x7c,0x7c,0x7c)
+    (122,122,122)     # rgb = (0x7a,0x7a,0x7a) grey48
+    ( 74,192, 74)     # rgb = (0x4a,0xc0,0x4a)
+    (118,118,118)     # rgb = (0x76,0x76,0x76)
+    (116,116,116)     # rgb = (0x74,0x74,0x74)
+    (114,114,114)     # rgb = (0x72,0x72,0x72)
+    (112,112,112)     # rgb = (0x70,0x70,0x70) grey44
+    (152,  0,  0)     # rgb = (0x98,0x00,0x00)
+    (110,110,110)     # rgb = (0x6e,0x6e,0x6e) grey43
+    (106,112,106)     # rgb = (0x6a,0x70,0x6a)
+    (122,102,102)     # rgb = (0x7a,0x66,0x66)
+    (106,106,106)     # rgb = (0x6a,0x6a,0x6a)
+    (132,  0,  0)     # rgb = (0x84,0x00,0x00)
+    ( 68,162, 68)     # rgb = (0x44,0xa2,0x44)
+    ( 75,150, 75)     # rgb = (0x4b,0x96,0x4b)
+    ( 97,100, 97)     # rgb = (0x61,0x64,0x61)
+    ( 98, 98, 98)     # rgb = (0x62,0x62,0x62)
+    (  0,244,  0)     # rgb = (0x00,0xf4,0x00)
+    ( 56,152, 56)     # rgb = (0x38,0x98,0x38)
+    ( 92, 92, 92)     # rgb = (0x5c,0x5c,0x5c) grey36
+    ( 90, 90, 90)     # rgb = (0x5a,0x5a,0x5a)
+    (  0,230,  0)     # rgb = (0x00,0xe6,0x00)
+    (  2,  2, 93)     # rgb = (0x02,0x02,0x5d)
+    ( 66,120, 66)     # rgb = (0x42,0x78,0x42)
+    ( 86, 86, 86)     # rgb = (0x56,0x56,0x56)
+    (  0,  0,240)     # rgb = (0x00,0x00,0xf0)
+    ( 46,148, 46)     # rgb = (0x2e,0x94,0x2e)
+    ( 71,104, 71)     # rgb = (0x47,0x68,0x47)
+    ( 49, 49, 96)     # rgb = (0x31,0x31,0x60)
+    (  0,216,  0)     # rgb = (0x00,0xd8,0x00)
+    ( 82, 82, 82)     # rgb = (0x52,0x52,0x52) grey32
+    ( 80, 80, 80)     # rgb = (0x50,0x50,0x50)
+    (  0,206,  0)     # rgb = (0x00,0xce,0x00)
+    ( 33,152, 33)     # rgb = (0x21,0x98,0x21)
+    ( 20, 20,109)     # rgb = (0x14,0x14,0x6d)
+    (  0,200,  0)     # rgb = (0x00,0xc8,0x00)
+    ( 76, 76, 76)     # rgb = (0x4c,0x4c,0x4c)
+    (253,253,253)     # rgb = (0xfd,0xfd,0xfd)
+    (  0,198,  0)     # rgb = (0x00,0xc6,0x00)
+    (  0,  0,157)     # rgb = (0x00,0x00,0x9d)
+    (111,107,107)     # rgb = (0x6f,0x6b,0x6b)
+    (234, 14, 14)     # rgb = (0xea,0x0e,0x0e)
+    ( 72, 72, 72)     # rgb = (0x48,0x48,0x48)
+    (  0,188,  0)     # rgb = (0x00,0xbc,0x00)
+    ( 52,102, 52)     # rgb = (0x34,0x66,0x34)
+    (  2,  2,245)     # rgb = (0x02,0x02,0xf5)
+    ( 83, 83, 96)     # rgb = (0x53,0x53,0x60)
+    (  0,176,  0)     # rgb = (0x00,0xb0,0x00)
+    (  0,174,  0)     # rgb = (0x00,0xae,0x00)
+    (183,  0,  0)     # rgb = (0xb7,0x00,0x00)
+    (  0,164,  0)     # rgb = (0x00,0xa4,0x00)
+    (239,239,239)     # rgb = (0xef,0xef,0xef)
+    (  0,162,  0)     # rgb = (0x00,0xa2,0x00)
+    (143, 79, 79)     # rgb = (0x8f,0x4f,0x4f)
+    (149, 52, 52)     # rgb = (0x95,0x34,0x34)
+    (  0,152,  0)     # rgb = (0x00,0x98,0x00)
+    (  0,150,  0)     # rgb = (0x00,0x96,0x00)
+    (  0,146,  0)     # rgb = (0x00,0x92,0x00)
+    (231,231,231)     # rgb = (0xe7,0xe7,0xe7)
+    (  0,140,  0)     # rgb = (0x00,0x8c,0x00)
+    (227,227,227)     # rgb = (0xe3,0xe3,0xe3) grey89
+    (  0,128,  0)     # rgb = (0x00,0x80,0x00)
+    (146,  6,  6)     # rgb = (0x92,0x06,0x06)
+    (  1,  1,111)     # rgb = (0x01,0x01,0x6f)
+    (100, 86, 89)     # rgb = (0x64,0x56,0x59)
+    (  0,  0,100)     # rgb = (0x00,0x00,0x64)
+    ( 78, 78,107)     # rgb = (0x4e,0x4e,0x6b)
+    (207,207,207)     # rgb = (0xcf,0xcf,0xcf) grey81
+    (221,221,224)     # rgb = (0xdd,0xdd,0xe0)
+    (  0,  0,123)     # rgb = (0x00,0x00,0x7b)
+    (201,201,201)     # rgb = (0xc9,0xc9,0xc9) grey79
+    ( 22, 22, 65)     # rgb = (0x16,0x16,0x41)
+    ( 33, 33, 89)     # rgb = (0x21,0x21,0x59)
+    ( 87, 87, 89)     # rgb = (0x57,0x57,0x59)
+    ( 68, 68,120)     # rgb = (0x44,0x44,0x78)
+    (191,191,191)     # rgb = (0xbf,0xbf,0xbf) grey75
+    (235,221,221)     # rgb = (0xeb,0xdd,0xdd)
+    ( 45, 45, 84)     # rgb = (0x2d,0x2d,0x54)
+    ( 10, 10, 96)     # rgb = (0x0a,0x0a,0x60)
+    (  0,  0,255)     # rgb = (0x00,0x00,0xff) blue1
+    (191,125,125)     # rgb = (0xbf,0x7d,0x7d)
+}
+tRNS {
+ 0}
+IMAGE {
+    pixels hex
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000e0ea66000000000000000000000000000000
+0000000000000000000000de02a336e43903f4f0000000000000000000000000
+000000000000000069ef1a358680062eb017b0ab7af459500000000000000000
+0000000000667c0ea9cc803979937917a03a878787b0e2ae8ae75c0000000000
+00005cea8ea72c8639e293208f7d7d19200639a017ab2ee4ac2ca7097c690000
+00007823a72b2bda198fd54ddad90521219191217d1917cc2b2b2b2baf8e0000
+0000e81f9b9f27014d05d91c2a2a2a7f037ecdcd7e7a012a2a2aaab7c2ef0000
+00006c9f229d981a23282828282828282828282828282828a7b445c3c8de0000
+00005ca249d63d140f139f272727272727272727a5a528af44c3c8ce43000000
+0000009a62ca41a6960e0d941da4a4a4a4a4a4a4a4a9b732525a1084a1000000
+000000965b58b53811940d0b090b1823a3a3252ab4d24c269957571088000000
+000000946162b9b59c0f14b12d0c8b8c98a3afb8ed1bbd82ba74300877000000
+00000088c565c7b5a6962dcf67be07048aa5b84315f326ba7395832950000000
+00000002bed8d4b94214b1c7dbb68c8b04a843e6d1bd814bceeb10a900000000
+0000007b47636ec441b23d4edb3f09078bac4315f340ec855a82995f00000000
+00000059bb63e15d42643dca6b3f8e090735ed76bd81c05224e9f27b00000000
+0000006cbbd47161c1684951dc3f908e8c3ceef38d08ebe96d6d086000000000
+00000050bf67dc54534fdd53ddb20d0b8eb815d10af1732fe312e60000000000
+00000000add6d6bf61c16f566eb20e0d924475bd578572c61e6d340000000000
+0000000016d8d3d03ec76bcfdf3b0f0e13bc4c8d2f84c040cb837b0000000000
+00000000550c47b3365bd45d6f33110f1a4575cbf2c0521e0802000000000000
+000000000000e7ac36be625e7031131122455a0a2f0a99c6e700000000000000
+000000000000006a9e37d36270331613a545f181e53032e80000000000000000
+00000000000000005088c5d371311816a8464b7374ee89000000000000000000
+0000000000000000000077b654a29b18acc24a722a5500000000000000000000
+0000000000000000000000d78a9f9e9b3548c38ac90000000000000000000000
+00000000000000000000000000ef1f9e3cc20200000000000000000000000000
+0000000000000000000000000000e89736780000000000000000000000000000
+00000000000000000000000000000060e0000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+}