mirror of
https://github.com/golang/go
synced 2024-11-20 10:04:45 -07:00
image/png: support for more formats
Added support for reading images with grayscale + alpha and for images with depth 1, 2 or 4. R=nigeltao CC=golang-dev https://golang.org/cl/4174053
This commit is contained in:
parent
c015dd21b8
commit
ca0d483014
@ -29,11 +29,19 @@ const (
|
|||||||
// A cb is a combination of color type and bit depth.
|
// A cb is a combination of color type and bit depth.
|
||||||
const (
|
const (
|
||||||
cbInvalid = iota
|
cbInvalid = iota
|
||||||
|
cbG1
|
||||||
|
cbG2
|
||||||
|
cbG4
|
||||||
cbG8
|
cbG8
|
||||||
|
cbGA8
|
||||||
cbTC8
|
cbTC8
|
||||||
|
cbP1
|
||||||
|
cbP2
|
||||||
|
cbP4
|
||||||
cbP8
|
cbP8
|
||||||
cbTCA8
|
cbTCA8
|
||||||
cbG16
|
cbG16
|
||||||
|
cbGA16
|
||||||
cbTC16
|
cbTC16
|
||||||
cbTCA16
|
cbTCA16
|
||||||
)
|
)
|
||||||
@ -70,6 +78,7 @@ type imgOrErr struct {
|
|||||||
|
|
||||||
type decoder struct {
|
type decoder struct {
|
||||||
width, height int
|
width, height int
|
||||||
|
depth int
|
||||||
palette image.PalettedColorModel
|
palette image.PalettedColorModel
|
||||||
cb int
|
cb int
|
||||||
stage int
|
stage int
|
||||||
@ -138,7 +147,29 @@ func (d *decoder) parseIHDR(r io.Reader, crc hash.Hash32, length uint32) os.Erro
|
|||||||
return UnsupportedError("dimension overflow")
|
return UnsupportedError("dimension overflow")
|
||||||
}
|
}
|
||||||
d.cb = cbInvalid
|
d.cb = cbInvalid
|
||||||
switch d.tmp[8] {
|
d.depth = int(d.tmp[8])
|
||||||
|
switch d.depth {
|
||||||
|
case 1:
|
||||||
|
switch d.tmp[9] {
|
||||||
|
case ctGrayscale:
|
||||||
|
d.cb = cbG1
|
||||||
|
case ctPaletted:
|
||||||
|
d.cb = cbP1
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
switch d.tmp[9] {
|
||||||
|
case ctGrayscale:
|
||||||
|
d.cb = cbG2
|
||||||
|
case ctPaletted:
|
||||||
|
d.cb = cbP2
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
switch d.tmp[9] {
|
||||||
|
case ctGrayscale:
|
||||||
|
d.cb = cbG4
|
||||||
|
case ctPaletted:
|
||||||
|
d.cb = cbP4
|
||||||
|
}
|
||||||
case 8:
|
case 8:
|
||||||
switch d.tmp[9] {
|
switch d.tmp[9] {
|
||||||
case ctGrayscale:
|
case ctGrayscale:
|
||||||
@ -147,6 +178,8 @@ func (d *decoder) parseIHDR(r io.Reader, crc hash.Hash32, length uint32) os.Erro
|
|||||||
d.cb = cbTC8
|
d.cb = cbTC8
|
||||||
case ctPaletted:
|
case ctPaletted:
|
||||||
d.cb = cbP8
|
d.cb = cbP8
|
||||||
|
case ctGrayscaleAlpha:
|
||||||
|
d.cb = cbGA8
|
||||||
case ctTrueColorAlpha:
|
case ctTrueColorAlpha:
|
||||||
d.cb = cbTCA8
|
d.cb = cbTCA8
|
||||||
}
|
}
|
||||||
@ -156,6 +189,8 @@ func (d *decoder) parseIHDR(r io.Reader, crc hash.Hash32, length uint32) os.Erro
|
|||||||
d.cb = cbG16
|
d.cb = cbG16
|
||||||
case ctTrueColor:
|
case ctTrueColor:
|
||||||
d.cb = cbTC16
|
d.cb = cbTC16
|
||||||
|
case ctGrayscaleAlpha:
|
||||||
|
d.cb = cbGA16
|
||||||
case ctTrueColorAlpha:
|
case ctTrueColorAlpha:
|
||||||
d.cb = cbTCA16
|
d.cb = cbTCA16
|
||||||
}
|
}
|
||||||
@ -169,7 +204,7 @@ func (d *decoder) parseIHDR(r io.Reader, crc hash.Hash32, length uint32) os.Erro
|
|||||||
|
|
||||||
func (d *decoder) parsePLTE(r io.Reader, crc hash.Hash32, length uint32) os.Error {
|
func (d *decoder) parsePLTE(r io.Reader, crc hash.Hash32, length uint32) os.Error {
|
||||||
np := int(length / 3) // The number of palette entries.
|
np := int(length / 3) // The number of palette entries.
|
||||||
if length%3 != 0 || np <= 0 || np > 256 {
|
if length%3 != 0 || np <= 0 || np > 256 || np > 1<<uint(d.depth) {
|
||||||
return FormatError("bad PLTE length")
|
return FormatError("bad PLTE length")
|
||||||
}
|
}
|
||||||
n, err := io.ReadFull(r, d.tmp[0:3*np])
|
n, err := io.ReadFull(r, d.tmp[0:3*np])
|
||||||
@ -178,7 +213,7 @@ func (d *decoder) parsePLTE(r io.Reader, crc hash.Hash32, length uint32) os.Erro
|
|||||||
}
|
}
|
||||||
crc.Write(d.tmp[0:n])
|
crc.Write(d.tmp[0:n])
|
||||||
switch d.cb {
|
switch d.cb {
|
||||||
case cbP8:
|
case cbP1, cbP2, cbP4, cbP8:
|
||||||
d.palette = image.PalettedColorModel(make([]image.Color, np))
|
d.palette = image.PalettedColorModel(make([]image.Color, np))
|
||||||
for i := 0; i < np; i++ {
|
for i := 0; i < np; i++ {
|
||||||
d.palette[i] = image.RGBAColor{d.tmp[3*i+0], d.tmp[3*i+1], d.tmp[3*i+2], 0xff}
|
d.palette[i] = image.RGBAColor{d.tmp[3*i+0], d.tmp[3*i+1], d.tmp[3*i+2], 0xff}
|
||||||
@ -206,7 +241,7 @@ func (d *decoder) parsetRNS(r io.Reader, crc hash.Hash32, length uint32) os.Erro
|
|||||||
return UnsupportedError("grayscale transparency")
|
return UnsupportedError("grayscale transparency")
|
||||||
case cbTC8, cbTC16:
|
case cbTC8, cbTC16:
|
||||||
return UnsupportedError("truecolor transparency")
|
return UnsupportedError("truecolor transparency")
|
||||||
case cbP8:
|
case cbP1, cbP2, cbP4, cbP8:
|
||||||
if n > len(d.palette) {
|
if n > len(d.palette) {
|
||||||
return FormatError("bad tRNS length")
|
return FormatError("bad tRNS length")
|
||||||
}
|
}
|
||||||
@ -214,7 +249,7 @@ func (d *decoder) parsetRNS(r io.Reader, crc hash.Hash32, length uint32) os.Erro
|
|||||||
rgba := d.palette[i].(image.RGBAColor)
|
rgba := d.palette[i].(image.RGBAColor)
|
||||||
d.palette[i] = image.RGBAColor{rgba.R, rgba.G, rgba.B, d.tmp[i]}
|
d.palette[i] = image.RGBAColor{rgba.R, rgba.G, rgba.B, d.tmp[i]}
|
||||||
}
|
}
|
||||||
case cbTCA8, cbTCA16:
|
case cbGA8, cbGA16, cbTCA8, cbTCA16:
|
||||||
return FormatError("tRNS, color type mismatch")
|
return FormatError("tRNS, color type mismatch")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -240,7 +275,7 @@ func (d *decoder) idatReader(idat io.Reader) (image.Image, os.Error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer r.Close()
|
defer r.Close()
|
||||||
bpp := 0 // Bytes per pixel.
|
bitsPerPixel := 0
|
||||||
maxPalette := uint8(0)
|
maxPalette := uint8(0)
|
||||||
var (
|
var (
|
||||||
gray *image.Gray
|
gray *image.Gray
|
||||||
@ -253,40 +288,50 @@ func (d *decoder) idatReader(idat io.Reader) (image.Image, os.Error) {
|
|||||||
img image.Image
|
img image.Image
|
||||||
)
|
)
|
||||||
switch d.cb {
|
switch d.cb {
|
||||||
case cbG8:
|
case cbG1, cbG2, cbG4, cbG8:
|
||||||
bpp = 1
|
bitsPerPixel = d.depth
|
||||||
gray = image.NewGray(d.width, d.height)
|
gray = image.NewGray(d.width, d.height)
|
||||||
img = gray
|
img = gray
|
||||||
|
case cbGA8:
|
||||||
|
bitsPerPixel = 16
|
||||||
|
nrgba = image.NewNRGBA(d.width, d.height)
|
||||||
|
img = nrgba
|
||||||
case cbTC8:
|
case cbTC8:
|
||||||
bpp = 3
|
bitsPerPixel = 24
|
||||||
rgba = image.NewRGBA(d.width, d.height)
|
rgba = image.NewRGBA(d.width, d.height)
|
||||||
img = rgba
|
img = rgba
|
||||||
case cbP8:
|
case cbP1, cbP2, cbP4, cbP8:
|
||||||
bpp = 1
|
bitsPerPixel = d.depth
|
||||||
paletted = image.NewPaletted(d.width, d.height, d.palette)
|
paletted = image.NewPaletted(d.width, d.height, d.palette)
|
||||||
img = paletted
|
img = paletted
|
||||||
maxPalette = uint8(len(d.palette) - 1)
|
maxPalette = uint8(len(d.palette) - 1)
|
||||||
case cbTCA8:
|
case cbTCA8:
|
||||||
bpp = 4
|
bitsPerPixel = 32
|
||||||
nrgba = image.NewNRGBA(d.width, d.height)
|
nrgba = image.NewNRGBA(d.width, d.height)
|
||||||
img = nrgba
|
img = nrgba
|
||||||
case cbG16:
|
case cbG16:
|
||||||
bpp = 2
|
bitsPerPixel = 16
|
||||||
gray16 = image.NewGray16(d.width, d.height)
|
gray16 = image.NewGray16(d.width, d.height)
|
||||||
img = gray16
|
img = gray16
|
||||||
|
case cbGA16:
|
||||||
|
bitsPerPixel = 32
|
||||||
|
nrgba64 = image.NewNRGBA64(d.width, d.height)
|
||||||
|
img = nrgba64
|
||||||
case cbTC16:
|
case cbTC16:
|
||||||
bpp = 6
|
bitsPerPixel = 48
|
||||||
rgba64 = image.NewRGBA64(d.width, d.height)
|
rgba64 = image.NewRGBA64(d.width, d.height)
|
||||||
img = rgba64
|
img = rgba64
|
||||||
case cbTCA16:
|
case cbTCA16:
|
||||||
bpp = 8
|
bitsPerPixel = 64
|
||||||
nrgba64 = image.NewNRGBA64(d.width, d.height)
|
nrgba64 = image.NewNRGBA64(d.width, d.height)
|
||||||
img = nrgba64
|
img = nrgba64
|
||||||
}
|
}
|
||||||
|
bytesPerPixel := (bitsPerPixel + 7) / 8
|
||||||
|
|
||||||
// cr and pr are the bytes for the current and previous row.
|
// cr and pr are the bytes for the current and previous row.
|
||||||
// The +1 is for the per-row filter type, which is at cr[0].
|
// The +1 is for the per-row filter type, which is at cr[0].
|
||||||
cr := make([]uint8, 1+bpp*d.width)
|
cr := make([]uint8, 1+(bitsPerPixel*d.width+7)/8)
|
||||||
pr := make([]uint8, 1+bpp*d.width)
|
pr := make([]uint8, 1+(bitsPerPixel*d.width+7)/8)
|
||||||
|
|
||||||
for y := 0; y < d.height; y++ {
|
for y := 0; y < d.height; y++ {
|
||||||
// Read the decompressed bytes.
|
// Read the decompressed bytes.
|
||||||
@ -302,26 +347,26 @@ func (d *decoder) idatReader(idat io.Reader) (image.Image, os.Error) {
|
|||||||
case ftNone:
|
case ftNone:
|
||||||
// No-op.
|
// No-op.
|
||||||
case ftSub:
|
case ftSub:
|
||||||
for i := bpp; i < len(cdat); i++ {
|
for i := bytesPerPixel; i < len(cdat); i++ {
|
||||||
cdat[i] += cdat[i-bpp]
|
cdat[i] += cdat[i-bytesPerPixel]
|
||||||
}
|
}
|
||||||
case ftUp:
|
case ftUp:
|
||||||
for i := 0; i < len(cdat); i++ {
|
for i := 0; i < len(cdat); i++ {
|
||||||
cdat[i] += pdat[i]
|
cdat[i] += pdat[i]
|
||||||
}
|
}
|
||||||
case ftAverage:
|
case ftAverage:
|
||||||
for i := 0; i < bpp; i++ {
|
for i := 0; i < bytesPerPixel; i++ {
|
||||||
cdat[i] += pdat[i] / 2
|
cdat[i] += pdat[i] / 2
|
||||||
}
|
}
|
||||||
for i := bpp; i < len(cdat); i++ {
|
for i := bytesPerPixel; i < len(cdat); i++ {
|
||||||
cdat[i] += uint8((int(cdat[i-bpp]) + int(pdat[i])) / 2)
|
cdat[i] += uint8((int(cdat[i-bytesPerPixel]) + int(pdat[i])) / 2)
|
||||||
}
|
}
|
||||||
case ftPaeth:
|
case ftPaeth:
|
||||||
for i := 0; i < bpp; i++ {
|
for i := 0; i < bytesPerPixel; i++ {
|
||||||
cdat[i] += paeth(0, pdat[i], 0)
|
cdat[i] += paeth(0, pdat[i], 0)
|
||||||
}
|
}
|
||||||
for i := bpp; i < len(cdat); i++ {
|
for i := bytesPerPixel; i < len(cdat); i++ {
|
||||||
cdat[i] += paeth(cdat[i-bpp], pdat[i], pdat[i-bpp])
|
cdat[i] += paeth(cdat[i-bytesPerPixel], pdat[i], pdat[i-bytesPerPixel])
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return nil, FormatError("bad filter type")
|
return nil, FormatError("bad filter type")
|
||||||
@ -329,14 +374,79 @@ func (d *decoder) idatReader(idat io.Reader) (image.Image, os.Error) {
|
|||||||
|
|
||||||
// Convert from bytes to colors.
|
// Convert from bytes to colors.
|
||||||
switch d.cb {
|
switch d.cb {
|
||||||
|
case cbG1:
|
||||||
|
for x := 0; x < d.width; x += 8 {
|
||||||
|
b := cdat[x/8]
|
||||||
|
for x2 := 0; x2 < 8 && x+x2 < d.width; x2++ {
|
||||||
|
gray.Set(x+x2, y, image.GrayColor{(b >> 7) * 0xff})
|
||||||
|
b <<= 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case cbG2:
|
||||||
|
for x := 0; x < d.width; x += 4 {
|
||||||
|
b := cdat[x/4]
|
||||||
|
for x2 := 0; x2 < 4 && x+x2 < d.width; x2++ {
|
||||||
|
gray.Set(x+x2, y, image.GrayColor{(b >> 6) * 0x55})
|
||||||
|
b <<= 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case cbG4:
|
||||||
|
for x := 0; x < d.width; x += 2 {
|
||||||
|
b := cdat[x/2]
|
||||||
|
for x2 := 0; x2 < 2 && x+x2 < d.width; x2++ {
|
||||||
|
gray.Set(x+x2, y, image.GrayColor{(b >> 4) * 0x11})
|
||||||
|
b <<= 4
|
||||||
|
}
|
||||||
|
}
|
||||||
case cbG8:
|
case cbG8:
|
||||||
for x := 0; x < d.width; x++ {
|
for x := 0; x < d.width; x++ {
|
||||||
gray.Set(x, y, image.GrayColor{cdat[x]})
|
gray.Set(x, y, image.GrayColor{cdat[x]})
|
||||||
}
|
}
|
||||||
|
case cbGA8:
|
||||||
|
for x := 0; x < d.width; x++ {
|
||||||
|
ycol := cdat[2*x+0]
|
||||||
|
nrgba.Set(x, y, image.NRGBAColor{ycol, ycol, ycol, cdat[2*x+1]})
|
||||||
|
}
|
||||||
case cbTC8:
|
case cbTC8:
|
||||||
for x := 0; x < d.width; x++ {
|
for x := 0; x < d.width; x++ {
|
||||||
rgba.Set(x, y, image.RGBAColor{cdat[3*x+0], cdat[3*x+1], cdat[3*x+2], 0xff})
|
rgba.Set(x, y, image.RGBAColor{cdat[3*x+0], cdat[3*x+1], cdat[3*x+2], 0xff})
|
||||||
}
|
}
|
||||||
|
case cbP1:
|
||||||
|
for x := 0; x < d.width; x += 8 {
|
||||||
|
b := cdat[x/8]
|
||||||
|
for x2 := 0; x2 < 8 && x+x2 < d.width; x2++ {
|
||||||
|
idx := b >> 7
|
||||||
|
if idx > maxPalette {
|
||||||
|
return nil, FormatError("palette index out of range")
|
||||||
|
}
|
||||||
|
paletted.SetColorIndex(x+x2, y, idx)
|
||||||
|
b <<= 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case cbP2:
|
||||||
|
for x := 0; x < d.width; x += 4 {
|
||||||
|
b := cdat[x/4]
|
||||||
|
for x2 := 0; x2 < 4 && x+x2 < d.width; x2++ {
|
||||||
|
idx := b >> 6
|
||||||
|
if idx > maxPalette {
|
||||||
|
return nil, FormatError("palette index out of range")
|
||||||
|
}
|
||||||
|
paletted.SetColorIndex(x+x2, y, idx)
|
||||||
|
b <<= 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case cbP4:
|
||||||
|
for x := 0; x < d.width; x += 2 {
|
||||||
|
b := cdat[x/2]
|
||||||
|
for x2 := 0; x2 < 2 && x+x2 < d.width; x2++ {
|
||||||
|
idx := b >> 4
|
||||||
|
if idx > maxPalette {
|
||||||
|
return nil, FormatError("palette index out of range")
|
||||||
|
}
|
||||||
|
paletted.SetColorIndex(x+x2, y, idx)
|
||||||
|
b <<= 4
|
||||||
|
}
|
||||||
|
}
|
||||||
case cbP8:
|
case cbP8:
|
||||||
for x := 0; x < d.width; x++ {
|
for x := 0; x < d.width; x++ {
|
||||||
if cdat[x] > maxPalette {
|
if cdat[x] > maxPalette {
|
||||||
@ -353,6 +463,12 @@ func (d *decoder) idatReader(idat io.Reader) (image.Image, os.Error) {
|
|||||||
ycol := uint16(cdat[2*x+0])<<8 | uint16(cdat[2*x+1])
|
ycol := uint16(cdat[2*x+0])<<8 | uint16(cdat[2*x+1])
|
||||||
gray16.Set(x, y, image.Gray16Color{ycol})
|
gray16.Set(x, y, image.Gray16Color{ycol})
|
||||||
}
|
}
|
||||||
|
case cbGA16:
|
||||||
|
for x := 0; x < d.width; x++ {
|
||||||
|
ycol := uint16(cdat[4*x+0])<<8 | uint16(cdat[4*x+1])
|
||||||
|
acol := uint16(cdat[4*x+2])<<8 | uint16(cdat[4*x+3])
|
||||||
|
nrgba64.Set(x, y, image.NRGBA64Color{ycol, ycol, ycol, acol})
|
||||||
|
}
|
||||||
case cbTC16:
|
case cbTC16:
|
||||||
for x := 0; x < d.width; x++ {
|
for x := 0; x < d.width; x++ {
|
||||||
rcol := uint16(cdat[6*x+0])<<8 | uint16(cdat[6*x+1])
|
rcol := uint16(cdat[6*x+0])<<8 | uint16(cdat[6*x+1])
|
||||||
@ -565,16 +681,20 @@ func DecodeConfig(r io.Reader) (image.Config, os.Error) {
|
|||||||
}
|
}
|
||||||
var cm image.ColorModel
|
var cm image.ColorModel
|
||||||
switch d.cb {
|
switch d.cb {
|
||||||
case cbG8:
|
case cbG1, cbG2, cbG4, cbG8:
|
||||||
cm = image.GrayColorModel
|
cm = image.GrayColorModel
|
||||||
|
case cbGA8:
|
||||||
|
cm = image.NRGBAColorModel
|
||||||
case cbTC8:
|
case cbTC8:
|
||||||
cm = image.RGBAColorModel
|
cm = image.RGBAColorModel
|
||||||
case cbP8:
|
case cbP1, cbP2, cbP4, cbP8:
|
||||||
cm = d.palette
|
cm = d.palette
|
||||||
case cbTCA8:
|
case cbTCA8:
|
||||||
cm = image.NRGBAColorModel
|
cm = image.NRGBAColorModel
|
||||||
case cbG16:
|
case cbG16:
|
||||||
cm = image.Gray16ColorModel
|
cm = image.Gray16ColorModel
|
||||||
|
case cbGA16:
|
||||||
|
cm = image.NRGBA64ColorModel
|
||||||
case cbTC16:
|
case cbTC16:
|
||||||
cm = image.RGBA64ColorModel
|
cm = image.RGBA64ColorModel
|
||||||
case cbTCA16:
|
case cbTCA16:
|
||||||
|
@ -13,23 +13,23 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
// The go PNG library currently supports only a subset of the full PNG specification.
|
|
||||||
// In particular, bit depths other than 8 or 16 are not supported, nor are grayscale-
|
|
||||||
// alpha images.
|
|
||||||
var filenames = []string{
|
var filenames = []string{
|
||||||
//"basn0g01", // bit depth is not 8 or 16
|
"basn0g01",
|
||||||
//"basn0g02", // bit depth is not 8 or 16
|
"basn0g01-30",
|
||||||
//"basn0g04", // bit depth is not 8 or 16
|
"basn0g02",
|
||||||
|
"basn0g02-29",
|
||||||
|
"basn0g04",
|
||||||
|
"basn0g04-31",
|
||||||
"basn0g08",
|
"basn0g08",
|
||||||
"basn0g16",
|
"basn0g16",
|
||||||
"basn2c08",
|
"basn2c08",
|
||||||
"basn2c16",
|
"basn2c16",
|
||||||
//"basn3p01", // bit depth is not 8 or 16
|
"basn3p01",
|
||||||
//"basn3p02", // bit depth is not 8 or 16
|
"basn3p02",
|
||||||
//"basn3p04", // bit depth is not 8 or 16
|
"basn3p04",
|
||||||
"basn3p08",
|
"basn3p08",
|
||||||
//"basn4a08", // grayscale-alpha color model
|
"basn4a08",
|
||||||
//"basn4a16", // grayscale-alpha color model
|
"basn4a16",
|
||||||
"basn6a08",
|
"basn6a08",
|
||||||
"basn6a16",
|
"basn6a16",
|
||||||
}
|
}
|
||||||
@ -58,7 +58,16 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
|
|||||||
cpm, _ := cm.(image.PalettedColorModel)
|
cpm, _ := cm.(image.PalettedColorModel)
|
||||||
var paletted *image.Paletted
|
var paletted *image.Paletted
|
||||||
if cpm != nil {
|
if cpm != nil {
|
||||||
bitdepth = 8
|
switch {
|
||||||
|
case len(cpm) <= 2:
|
||||||
|
bitdepth = 1
|
||||||
|
case len(cpm) <= 4:
|
||||||
|
bitdepth = 2
|
||||||
|
case len(cpm) <= 16:
|
||||||
|
bitdepth = 4
|
||||||
|
default:
|
||||||
|
bitdepth = 8
|
||||||
|
}
|
||||||
paletted = png.(*image.Paletted)
|
paletted = png.(*image.Paletted)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,8 +140,15 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
|
|||||||
fmt.Fprintf(w, "%04x%04x%04x%04x ", nrgba64.R, nrgba64.G, nrgba64.B, nrgba64.A)
|
fmt.Fprintf(w, "%04x%04x%04x%04x ", nrgba64.R, nrgba64.G, nrgba64.B, nrgba64.A)
|
||||||
}
|
}
|
||||||
case cpm != nil:
|
case cpm != nil:
|
||||||
|
var b, c int
|
||||||
for x := bounds.Min.X; x < bounds.Max.X; x++ {
|
for x := bounds.Min.X; x < bounds.Max.X; x++ {
|
||||||
fmt.Fprintf(w, "%02x", paletted.ColorIndexAt(x, y))
|
b = b<<uint(bitdepth) | int(paletted.ColorIndexAt(x, y))
|
||||||
|
c++
|
||||||
|
if c == 8/bitdepth {
|
||||||
|
fmt.Fprintf(w, "%02x", b)
|
||||||
|
b = 0
|
||||||
|
c = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
io.WriteString(w, "\n")
|
io.WriteString(w, "\n")
|
||||||
@ -143,14 +159,25 @@ func sng(w io.WriteCloser, filename string, png image.Image) {
|
|||||||
func TestReader(t *testing.T) {
|
func TestReader(t *testing.T) {
|
||||||
for _, fn := range filenames {
|
for _, fn := range filenames {
|
||||||
// Read the .png file.
|
// Read the .png file.
|
||||||
image, err := readPng("testdata/pngsuite/" + fn + ".png")
|
img, err := readPng("testdata/pngsuite/" + fn + ".png")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(fn, err)
|
t.Error(fn, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if fn == "basn4a16" {
|
||||||
|
// basn4a16.sng is gray + alpha but sng() will produce true color + alpha
|
||||||
|
// so we just check a single random pixel.
|
||||||
|
c := img.At(2, 1).(image.NRGBA64Color)
|
||||||
|
if c.R != 0x11a7 || c.G != 0x11a7 || c.B != 0x11a7 || c.A != 0x1085 {
|
||||||
|
t.Error(fn, fmt.Errorf("wrong pixel value at (2, 1): %x", c))
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
piper, pipew := io.Pipe()
|
piper, pipew := io.Pipe()
|
||||||
pb := bufio.NewReader(piper)
|
pb := bufio.NewReader(piper)
|
||||||
go sng(pipew, fn, image)
|
go sng(pipew, fn, img)
|
||||||
defer piper.Close()
|
defer piper.Close()
|
||||||
|
|
||||||
// Read the .sng file.
|
// Read the .sng file.
|
||||||
|
11
src/pkg/image/png/testdata/pngsuite/README
vendored
11
src/pkg/image/png/testdata/pngsuite/README
vendored
@ -5,5 +5,14 @@ README.original gives the following license for those files:
|
|||||||
Permission to use, copy, and distribute these images for any purpose
|
Permission to use, copy, and distribute these images for any purpose
|
||||||
and without fee is hereby granted.
|
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 *.sng files in this directory were generated from the *.png files
|
The *.sng files in this directory were generated from the *.png files
|
||||||
by the sng command-line tool.
|
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.
|
||||||
|
BIN
src/pkg/image/png/testdata/pngsuite/basn0g01-30.png
vendored
Normal file
BIN
src/pkg/image/png/testdata/pngsuite/basn0g01-30.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 162 B |
39
src/pkg/image/png/testdata/pngsuite/basn0g01-30.sng
vendored
Normal file
39
src/pkg/image/png/testdata/pngsuite/basn0g01-30.sng
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#SNG: from basn0g01-30.png
|
||||||
|
IHDR {
|
||||||
|
width: 30; height: 30; bitdepth: 8;
|
||||||
|
using grayscale;
|
||||||
|
}
|
||||||
|
gAMA {1.0000}
|
||||||
|
IMAGE {
|
||||||
|
pixels hex
|
||||||
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
|
||||||
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
|
||||||
|
ffffffff0000ffffffffffff0000ffffffffffffffffffffffffff000000
|
||||||
|
ffffffff0000ffffffffffff0000ffffffffffffffffffffffff00000000
|
||||||
|
ffffffff0000ffffffffffff0000ffffffffffffffffffffff0000000000
|
||||||
|
ffffffff0000ffff0000ffff0000ffffffffffffffffffff000000000000
|
||||||
|
ffffffff0000ffff0000ffff0000ffffffffffffffffff00000000000000
|
||||||
|
ffffffff0000ffff0000ffff0000ffffffffffffffff0000000000000000
|
||||||
|
ffffffffff0000000000000000ffffffffffffffff000000000000000000
|
||||||
|
ffffffffff0000000000000000ffffffffffffff00000000000000000000
|
||||||
|
ffffffffffff0000ffff0000ffffffffffffff0000000000000000000000
|
||||||
|
ffffffffffff0000ffff0000ffffffffffff000000000000000000000000
|
||||||
|
ffffffffffffffffffffffffffffffffff00000000000000000000000000
|
||||||
|
ffffffffffffffffffffffffffffffff0000000000000000000000000000
|
||||||
|
ffffffffffffffffffffffffffffff000000000000000000000000000000
|
||||||
|
ffffffffffffffffffffffffffff00000000000000000000000000000000
|
||||||
|
ffffffffffffffffffffffffff00000000000000ffffffffffffff000000
|
||||||
|
ffffffffffffffffffffffff0000000000000000ffffffffffffff000000
|
||||||
|
ffffffffffffffffffffff000000000000000000ffff00000000ffff0000
|
||||||
|
ffffffffffffffffffff00000000000000000000ffff00000000ffff0000
|
||||||
|
ffffffffffffffffff0000000000000000000000ffffffffffffff000000
|
||||||
|
ffffffffffffffff000000000000000000000000ffffffffffffff000000
|
||||||
|
ffffffffffffff00000000000000000000000000ffff00000000ffff0000
|
||||||
|
ffffffffffff0000000000000000000000000000ffff00000000ffff0000
|
||||||
|
ffffffffff000000000000000000000000000000ffffffffffffff000000
|
||||||
|
ffffffff00000000000000000000000000000000ffffffffffffff000000
|
||||||
|
ffffff000000000000000000000000000000000000000000000000000000
|
||||||
|
ffff00000000000000000000000000000000000000000000000000000000
|
||||||
|
}
|
66
src/pkg/image/png/testdata/pngsuite/basn0g01.sng
vendored
66
src/pkg/image/png/testdata/pngsuite/basn0g01.sng
vendored
@ -1,41 +1,41 @@
|
|||||||
#SNG: from basn0g01.png
|
#SNG: from basn0g01.png
|
||||||
IHDR {
|
IHDR {
|
||||||
width: 32; height: 32; bitdepth: 1;
|
width: 32; height: 32; bitdepth: 8;
|
||||||
using grayscale;
|
using grayscale;
|
||||||
}
|
}
|
||||||
gAMA {1.0000}
|
gAMA {1.0000}
|
||||||
IMAGE {
|
IMAGE {
|
||||||
pixels hex
|
pixels hex
|
||||||
fffffffe
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
|
||||||
fffffffc
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
|
||||||
fffffff8
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
|
||||||
fffffff0
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
|
||||||
f3f3ffe0
|
ffffffff0000ffffffffffff0000ffffffffffffffffffffffffff0000000000
|
||||||
f3f3ffc0
|
ffffffff0000ffffffffffff0000ffffffffffffffffffffffff000000000000
|
||||||
f3f3ff80
|
ffffffff0000ffffffffffff0000ffffffffffffffffffffff00000000000000
|
||||||
f333ff00
|
ffffffff0000ffff0000ffff0000ffffffffffffffffffff0000000000000000
|
||||||
f333fe00
|
ffffffff0000ffff0000ffff0000ffffffffffffffffff000000000000000000
|
||||||
f333fc00
|
ffffffff0000ffff0000ffff0000ffffffffffffffff00000000000000000000
|
||||||
f807f800
|
ffffffffff0000000000000000ffffffffffffffff0000000000000000000000
|
||||||
f807f000
|
ffffffffff0000000000000000ffffffffffffff000000000000000000000000
|
||||||
fccfe000
|
ffffffffffff0000ffff0000ffffffffffffff00000000000000000000000000
|
||||||
fccfc000
|
ffffffffffff0000ffff0000ffffffffffff0000000000000000000000000000
|
||||||
ffff8000
|
ffffffffffffffffffffffffffffffffff000000000000000000000000000000
|
||||||
ffff0000
|
ffffffffffffffffffffffffffffffff00000000000000000000000000000000
|
||||||
fffe0000
|
ffffffffffffffffffffffffffffff0000000000000000000000000000000000
|
||||||
fffc0000
|
ffffffffffffffffffffffffffff000000000000000000000000000000000000
|
||||||
fff80fe0
|
ffffffffffffffffffffffffff00000000000000ffffffffffffff0000000000
|
||||||
fff00fe0
|
ffffffffffffffffffffffff0000000000000000ffffffffffffff0000000000
|
||||||
ffe00c30
|
ffffffffffffffffffffff000000000000000000ffff00000000ffff00000000
|
||||||
ffc00c30
|
ffffffffffffffffffff00000000000000000000ffff00000000ffff00000000
|
||||||
ff800fe0
|
ffffffffffffffffff0000000000000000000000ffffffffffffff0000000000
|
||||||
ff000fe0
|
ffffffffffffffff000000000000000000000000ffffffffffffff0000000000
|
||||||
fe000c30
|
ffffffffffffff00000000000000000000000000ffff00000000ffff00000000
|
||||||
fc000c30
|
ffffffffffff0000000000000000000000000000ffff00000000ffff00000000
|
||||||
f8000fe0
|
ffffffffff000000000000000000000000000000ffffffffffffff0000000000
|
||||||
f0000fe0
|
ffffffff00000000000000000000000000000000ffffffffffffff0000000000
|
||||||
e0000000
|
ffffff0000000000000000000000000000000000000000000000000000000000
|
||||||
c0000000
|
ffff000000000000000000000000000000000000000000000000000000000000
|
||||||
80000000
|
ff00000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
}
|
}
|
||||||
|
BIN
src/pkg/image/png/testdata/pngsuite/basn0g02-29.png
vendored
Normal file
BIN
src/pkg/image/png/testdata/pngsuite/basn0g02-29.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 110 B |
38
src/pkg/image/png/testdata/pngsuite/basn0g02-29.sng
vendored
Normal file
38
src/pkg/image/png/testdata/pngsuite/basn0g02-29.sng
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#SNG: from basn0g02-29.png
|
||||||
|
IHDR {
|
||||||
|
width: 29; height: 29; bitdepth: 8;
|
||||||
|
using grayscale;
|
||||||
|
}
|
||||||
|
gAMA {1.0000}
|
||||||
|
IMAGE {
|
||||||
|
pixels hex
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aa
|
||||||
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aa
|
||||||
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aa
|
||||||
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aa
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaff
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055
|
||||||
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aa
|
||||||
|
}
|
66
src/pkg/image/png/testdata/pngsuite/basn0g02.sng
vendored
66
src/pkg/image/png/testdata/pngsuite/basn0g02.sng
vendored
@ -1,41 +1,41 @@
|
|||||||
#SNG: from basn0g02.png
|
#SNG: from basn0g02.png
|
||||||
IHDR {
|
IHDR {
|
||||||
width: 32; height: 32; bitdepth: 2;
|
width: 32; height: 32; bitdepth: 8;
|
||||||
using grayscale;
|
using grayscale;
|
||||||
}
|
}
|
||||||
gAMA {1.0000}
|
gAMA {1.0000}
|
||||||
IMAGE {
|
IMAGE {
|
||||||
pixels hex
|
pixels hex
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
0055aaff0055aaff
|
0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
55aaff0055aaff00
|
55555555aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff00000000
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
aaff0055aaff0055
|
aaaaaaaaffffffff0000000055555555aaaaaaaaffffffff0000000055555555
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
ff0055aaff0055aa
|
ffffffff0000000055555555aaaaaaaaffffffff0000000055555555aaaaaaaa
|
||||||
}
|
}
|
||||||
|
BIN
src/pkg/image/png/testdata/pngsuite/basn0g04-31.png
vendored
Normal file
BIN
src/pkg/image/png/testdata/pngsuite/basn0g04-31.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 153 B |
40
src/pkg/image/png/testdata/pngsuite/basn0g04-31.sng
vendored
Normal file
40
src/pkg/image/png/testdata/pngsuite/basn0g04-31.sng
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#SNG: from basn0g04-31.png
|
||||||
|
IHDR {
|
||||||
|
width: 31; height: 31; bitdepth: 8;
|
||||||
|
using grayscale;
|
||||||
|
}
|
||||||
|
gAMA {1.0000}
|
||||||
|
IMAGE {
|
||||||
|
pixels hex
|
||||||
|
00000000111111112222222233333333444444445555555566666666777777
|
||||||
|
00000000111111112222222233333333444444445555555566666666777777
|
||||||
|
00000000111111112222222233333333444444445555555566666666777777
|
||||||
|
00000000111111112222222233333333444444445555555566666666777777
|
||||||
|
11111111222222223333333344444444555555556666666677777777888888
|
||||||
|
11111111222222223333333344444444555555556666666677777777888888
|
||||||
|
11111111222222223333333344444444555555556666666677777777888888
|
||||||
|
11111111222222223333333344444444555555556666666677777777888888
|
||||||
|
22222222333333334444444455555555666666667777777788888888999999
|
||||||
|
22222222333333334444444455555555666666667777777788888888999999
|
||||||
|
22222222333333334444444455555555666666667777777788888888999999
|
||||||
|
22222222333333334444444455555555666666667777777788888888999999
|
||||||
|
33333333444444445555555566666666777777778888888899999999aaaaaa
|
||||||
|
33333333444444445555555566666666777777778888888899999999aaaaaa
|
||||||
|
33333333444444445555555566666666777777778888888899999999aaaaaa
|
||||||
|
33333333444444445555555566666666777777778888888899999999aaaaaa
|
||||||
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbb
|
||||||
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbb
|
||||||
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbb
|
||||||
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbb
|
||||||
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccc
|
||||||
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccc
|
||||||
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccc
|
||||||
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccc
|
||||||
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddd
|
||||||
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddd
|
||||||
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddd
|
||||||
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddd
|
||||||
|
777777778888888899999999aaaaaaaabbbbbbbbccccccccddddddddeeeeee
|
||||||
|
777777778888888899999999aaaaaaaabbbbbbbbccccccccddddddddeeeeee
|
||||||
|
777777778888888899999999aaaaaaaabbbbbbbbccccccccddddddddeeeeee
|
||||||
|
}
|
66
src/pkg/image/png/testdata/pngsuite/basn0g04.sng
vendored
66
src/pkg/image/png/testdata/pngsuite/basn0g04.sng
vendored
@ -1,41 +1,41 @@
|
|||||||
#SNG: from basn0g04.png
|
#SNG: from basn0g04.png
|
||||||
IHDR {
|
IHDR {
|
||||||
width: 32; height: 32; bitdepth: 4;
|
width: 32; height: 32; bitdepth: 8;
|
||||||
using grayscale;
|
using grayscale;
|
||||||
}
|
}
|
||||||
gAMA {1.0000}
|
gAMA {1.0000}
|
||||||
IMAGE {
|
IMAGE {
|
||||||
pixels hex
|
pixels hex
|
||||||
00001111222233334444555566667777
|
0000000011111111222222223333333344444444555555556666666677777777
|
||||||
00001111222233334444555566667777
|
0000000011111111222222223333333344444444555555556666666677777777
|
||||||
00001111222233334444555566667777
|
0000000011111111222222223333333344444444555555556666666677777777
|
||||||
00001111222233334444555566667777
|
0000000011111111222222223333333344444444555555556666666677777777
|
||||||
11112222333344445555666677778888
|
1111111122222222333333334444444455555555666666667777777788888888
|
||||||
11112222333344445555666677778888
|
1111111122222222333333334444444455555555666666667777777788888888
|
||||||
11112222333344445555666677778888
|
1111111122222222333333334444444455555555666666667777777788888888
|
||||||
11112222333344445555666677778888
|
1111111122222222333333334444444455555555666666667777777788888888
|
||||||
22223333444455556666777788889999
|
2222222233333333444444445555555566666666777777778888888899999999
|
||||||
22223333444455556666777788889999
|
2222222233333333444444445555555566666666777777778888888899999999
|
||||||
22223333444455556666777788889999
|
2222222233333333444444445555555566666666777777778888888899999999
|
||||||
22223333444455556666777788889999
|
2222222233333333444444445555555566666666777777778888888899999999
|
||||||
3333444455556666777788889999aaaa
|
33333333444444445555555566666666777777778888888899999999aaaaaaaa
|
||||||
3333444455556666777788889999aaaa
|
33333333444444445555555566666666777777778888888899999999aaaaaaaa
|
||||||
3333444455556666777788889999aaaa
|
33333333444444445555555566666666777777778888888899999999aaaaaaaa
|
||||||
3333444455556666777788889999aaaa
|
33333333444444445555555566666666777777778888888899999999aaaaaaaa
|
||||||
444455556666777788889999aaaabbbb
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbbbb
|
||||||
444455556666777788889999aaaabbbb
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbbbb
|
||||||
444455556666777788889999aaaabbbb
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbbbb
|
||||||
444455556666777788889999aaaabbbb
|
444444445555555566666666777777778888888899999999aaaaaaaabbbbbbbb
|
||||||
55556666777788889999aaaabbbbcccc
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccccc
|
||||||
55556666777788889999aaaabbbbcccc
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccccc
|
||||||
55556666777788889999aaaabbbbcccc
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccccc
|
||||||
55556666777788889999aaaabbbbcccc
|
5555555566666666777777778888888899999999aaaaaaaabbbbbbbbcccccccc
|
||||||
6666777788889999aaaabbbbccccdddd
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddddd
|
||||||
6666777788889999aaaabbbbccccdddd
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddddd
|
||||||
6666777788889999aaaabbbbccccdddd
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddddd
|
||||||
6666777788889999aaaabbbbccccdddd
|
66666666777777778888888899999999aaaaaaaabbbbbbbbccccccccdddddddd
|
||||||
777788889999aaaabbbbccccddddeeee
|
777777778888888899999999aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee
|
||||||
777788889999aaaabbbbccccddddeeee
|
777777778888888899999999aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee
|
||||||
777788889999aaaabbbbccccddddeeee
|
777777778888888899999999aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee
|
||||||
777788889999aaaabbbbccccddddeeee
|
777777778888888899999999aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee
|
||||||
}
|
}
|
||||||
|
11
src/pkg/image/png/testdata/pngsuite/basn3p02.sng
vendored
11
src/pkg/image/png/testdata/pngsuite/basn3p02.sng
vendored
@ -4,14 +4,11 @@ IHDR {
|
|||||||
using color palette;
|
using color palette;
|
||||||
}
|
}
|
||||||
gAMA {1.0000}
|
gAMA {1.0000}
|
||||||
sBIT {
|
|
||||||
red: 1; green: 1; blue: 1;
|
|
||||||
}
|
|
||||||
PLTE {
|
PLTE {
|
||||||
( 0,255, 0) # rgb = (0x00,0xff,0x00) green1
|
( 0,255, 0) # rgb = (0x00,0xff,0x00)
|
||||||
(255, 0, 0) # rgb = (0xff,0x00,0x00) red1
|
(255, 0, 0) # rgb = (0xff,0x00,0x00)
|
||||||
(255,255, 0) # rgb = (0xff,0xff,0x00) yellow1
|
(255,255, 0) # rgb = (0xff,0xff,0x00)
|
||||||
( 0, 0,255) # rgb = (0x00,0x00,0xff) blue1
|
( 0, 0,255) # rgb = (0x00,0x00,0xff)
|
||||||
}
|
}
|
||||||
IMAGE {
|
IMAGE {
|
||||||
pixels hex
|
pixels hex
|
||||||
|
@ -4,19 +4,16 @@ IHDR {
|
|||||||
using color palette;
|
using color palette;
|
||||||
}
|
}
|
||||||
gAMA {1.0000}
|
gAMA {1.0000}
|
||||||
sBIT {
|
|
||||||
red: 4; green: 4; blue: 4;
|
|
||||||
}
|
|
||||||
PLTE {
|
PLTE {
|
||||||
( 34, 0,255) # rgb = (0x22,0x00,0xff)
|
( 34, 0,255) # rgb = (0x22,0x00,0xff)
|
||||||
( 0,255,255) # rgb = (0x00,0xff,0xff) cyan1
|
( 0,255,255) # rgb = (0x00,0xff,0xff)
|
||||||
(136, 0,255) # rgb = (0x88,0x00,0xff)
|
(136, 0,255) # rgb = (0x88,0x00,0xff)
|
||||||
( 34,255, 0) # rgb = (0x22,0xff,0x00)
|
( 34,255, 0) # rgb = (0x22,0xff,0x00)
|
||||||
( 0,153,255) # rgb = (0x00,0x99,0xff)
|
( 0,153,255) # rgb = (0x00,0x99,0xff)
|
||||||
(255,102, 0) # rgb = (0xff,0x66,0x00)
|
(255,102, 0) # rgb = (0xff,0x66,0x00)
|
||||||
(221, 0,255) # rgb = (0xdd,0x00,0xff)
|
(221, 0,255) # rgb = (0xdd,0x00,0xff)
|
||||||
(119,255, 0) # rgb = (0x77,0xff,0x00)
|
(119,255, 0) # rgb = (0x77,0xff,0x00)
|
||||||
(255, 0, 0) # rgb = (0xff,0x00,0x00) red1
|
(255, 0, 0) # rgb = (0xff,0x00,0x00)
|
||||||
( 0,255,153) # rgb = (0x00,0xff,0x99)
|
( 0,255,153) # rgb = (0x00,0xff,0x99)
|
||||||
(221,255, 0) # rgb = (0xdd,0xff,0x00)
|
(221,255, 0) # rgb = (0xdd,0xff,0x00)
|
||||||
(255, 0,187) # rgb = (0xff,0x00,0xbb)
|
(255, 0,187) # rgb = (0xff,0x00,0xbb)
|
||||||
|
66
src/pkg/image/png/testdata/pngsuite/basn4a08.sng
vendored
66
src/pkg/image/png/testdata/pngsuite/basn4a08.sng
vendored
@ -1,41 +1,41 @@
|
|||||||
#SNG: from basn4a08.png
|
#SNG: from basn4a08.png
|
||||||
IHDR {
|
IHDR {
|
||||||
width: 32; height: 32; bitdepth: 8;
|
width: 32; height: 32; bitdepth: 8;
|
||||||
using grayscale alpha;
|
using color alpha;
|
||||||
}
|
}
|
||||||
gAMA {1.0000}
|
gAMA {1.0000}
|
||||||
IMAGE {
|
IMAGE {
|
||||||
pixels hex
|
pixels hex
|
||||||
ff00 ff08 ff10 ff18 ff20 ff29 ff31 ff39 ff41 ff4a ff52 ff5a ff62 ff6a ff73 ff7b ff83 ff8b ff94 ff9c ffa4 ffac ffb4 ffbd ffc5 ffcd ffd5 ffde ffe6 ffee fff6 ffff
|
ffffff00 ffffff08 ffffff10 ffffff18 ffffff20 ffffff29 ffffff31 ffffff39 ffffff41 ffffff4a ffffff52 ffffff5a ffffff62 ffffff6a ffffff73 ffffff7b ffffff83 ffffff8b ffffff94 ffffff9c ffffffa4 ffffffac ffffffb4 ffffffbd ffffffc5 ffffffcd ffffffd5 ffffffde ffffffe6 ffffffee fffffff6 ffffffff
|
||||||
f600 f608 f610 f618 f620 f629 f631 f639 f641 f64a f652 f65a f662 f66a f673 f67b f683 f68b f694 f69c f6a4 f6ac f6b4 f6bd f6c5 f6cd f6d5 f6de f6e6 f6ee f6f6 f6ff
|
f6f6f600 f6f6f608 f6f6f610 f6f6f618 f6f6f620 f6f6f629 f6f6f631 f6f6f639 f6f6f641 f6f6f64a f6f6f652 f6f6f65a f6f6f662 f6f6f66a f6f6f673 f6f6f67b f6f6f683 f6f6f68b f6f6f694 f6f6f69c f6f6f6a4 f6f6f6ac f6f6f6b4 f6f6f6bd f6f6f6c5 f6f6f6cd f6f6f6d5 f6f6f6de f6f6f6e6 f6f6f6ee f6f6f6f6 f6f6f6ff
|
||||||
ee00 ee08 ee10 ee18 ee20 ee29 ee31 ee39 ee41 ee4a ee52 ee5a ee62 ee6a ee73 ee7b ee83 ee8b ee94 ee9c eea4 eeac eeb4 eebd eec5 eecd eed5 eede eee6 eeee eef6 eeff
|
eeeeee00 eeeeee08 eeeeee10 eeeeee18 eeeeee20 eeeeee29 eeeeee31 eeeeee39 eeeeee41 eeeeee4a eeeeee52 eeeeee5a eeeeee62 eeeeee6a eeeeee73 eeeeee7b eeeeee83 eeeeee8b eeeeee94 eeeeee9c eeeeeea4 eeeeeeac eeeeeeb4 eeeeeebd eeeeeec5 eeeeeecd eeeeeed5 eeeeeede eeeeeee6 eeeeeeee eeeeeef6 eeeeeeff
|
||||||
e600 e608 e610 e618 e620 e629 e631 e639 e641 e64a e652 e65a e662 e66a e673 e67b e683 e68b e694 e69c e6a4 e6ac e6b4 e6bd e6c5 e6cd e6d5 e6de e6e6 e6ee e6f6 e6ff
|
e6e6e600 e6e6e608 e6e6e610 e6e6e618 e6e6e620 e6e6e629 e6e6e631 e6e6e639 e6e6e641 e6e6e64a e6e6e652 e6e6e65a e6e6e662 e6e6e66a e6e6e673 e6e6e67b e6e6e683 e6e6e68b e6e6e694 e6e6e69c e6e6e6a4 e6e6e6ac e6e6e6b4 e6e6e6bd e6e6e6c5 e6e6e6cd e6e6e6d5 e6e6e6de e6e6e6e6 e6e6e6ee e6e6e6f6 e6e6e6ff
|
||||||
de00 de08 de10 de18 de20 de29 de31 de39 de41 de4a de52 de5a de62 de6a de73 de7b de83 de8b de94 de9c dea4 deac deb4 debd dec5 decd ded5 dede dee6 deee def6 deff
|
dedede00 dedede08 dedede10 dedede18 dedede20 dedede29 dedede31 dedede39 dedede41 dedede4a dedede52 dedede5a dedede62 dedede6a dedede73 dedede7b dedede83 dedede8b dedede94 dedede9c dededea4 dededeac dededeb4 dededebd dededec5 dededecd dededed5 dededede dededee6 dededeee dededef6 dededeff
|
||||||
d500 d508 d510 d518 d520 d529 d531 d539 d541 d54a d552 d55a d562 d56a d573 d57b d583 d58b d594 d59c d5a4 d5ac d5b4 d5bd d5c5 d5cd d5d5 d5de d5e6 d5ee d5f6 d5ff
|
d5d5d500 d5d5d508 d5d5d510 d5d5d518 d5d5d520 d5d5d529 d5d5d531 d5d5d539 d5d5d541 d5d5d54a d5d5d552 d5d5d55a d5d5d562 d5d5d56a d5d5d573 d5d5d57b d5d5d583 d5d5d58b d5d5d594 d5d5d59c d5d5d5a4 d5d5d5ac d5d5d5b4 d5d5d5bd d5d5d5c5 d5d5d5cd d5d5d5d5 d5d5d5de d5d5d5e6 d5d5d5ee d5d5d5f6 d5d5d5ff
|
||||||
cd00 cd08 cd10 cd18 cd20 cd29 cd31 cd39 cd41 cd4a cd52 cd5a cd62 cd6a cd73 cd7b cd83 cd8b cd94 cd9c cda4 cdac cdb4 cdbd cdc5 cdcd cdd5 cdde cde6 cdee cdf6 cdff
|
cdcdcd00 cdcdcd08 cdcdcd10 cdcdcd18 cdcdcd20 cdcdcd29 cdcdcd31 cdcdcd39 cdcdcd41 cdcdcd4a cdcdcd52 cdcdcd5a cdcdcd62 cdcdcd6a cdcdcd73 cdcdcd7b cdcdcd83 cdcdcd8b cdcdcd94 cdcdcd9c cdcdcda4 cdcdcdac cdcdcdb4 cdcdcdbd cdcdcdc5 cdcdcdcd cdcdcdd5 cdcdcdde cdcdcde6 cdcdcdee cdcdcdf6 cdcdcdff
|
||||||
c500 c508 c510 c518 c520 c529 c531 c539 c541 c54a c552 c55a c562 c56a c573 c57b c583 c58b c594 c59c c5a4 c5ac c5b4 c5bd c5c5 c5cd c5d5 c5de c5e6 c5ee c5f6 c5ff
|
c5c5c500 c5c5c508 c5c5c510 c5c5c518 c5c5c520 c5c5c529 c5c5c531 c5c5c539 c5c5c541 c5c5c54a c5c5c552 c5c5c55a c5c5c562 c5c5c56a c5c5c573 c5c5c57b c5c5c583 c5c5c58b c5c5c594 c5c5c59c c5c5c5a4 c5c5c5ac c5c5c5b4 c5c5c5bd c5c5c5c5 c5c5c5cd c5c5c5d5 c5c5c5de c5c5c5e6 c5c5c5ee c5c5c5f6 c5c5c5ff
|
||||||
bd00 bd08 bd10 bd18 bd20 bd29 bd31 bd39 bd41 bd4a bd52 bd5a bd62 bd6a bd73 bd7b bd83 bd8b bd94 bd9c bda4 bdac bdb4 bdbd bdc5 bdcd bdd5 bdde bde6 bdee bdf6 bdff
|
bdbdbd00 bdbdbd08 bdbdbd10 bdbdbd18 bdbdbd20 bdbdbd29 bdbdbd31 bdbdbd39 bdbdbd41 bdbdbd4a bdbdbd52 bdbdbd5a bdbdbd62 bdbdbd6a bdbdbd73 bdbdbd7b bdbdbd83 bdbdbd8b bdbdbd94 bdbdbd9c bdbdbda4 bdbdbdac bdbdbdb4 bdbdbdbd bdbdbdc5 bdbdbdcd bdbdbdd5 bdbdbdde bdbdbde6 bdbdbdee bdbdbdf6 bdbdbdff
|
||||||
b400 b408 b410 b418 b420 b429 b431 b439 b441 b44a b452 b45a b462 b46a b473 b47b b483 b48b b494 b49c b4a4 b4ac b4b4 b4bd b4c5 b4cd b4d5 b4de b4e6 b4ee b4f6 b4ff
|
b4b4b400 b4b4b408 b4b4b410 b4b4b418 b4b4b420 b4b4b429 b4b4b431 b4b4b439 b4b4b441 b4b4b44a b4b4b452 b4b4b45a b4b4b462 b4b4b46a b4b4b473 b4b4b47b b4b4b483 b4b4b48b b4b4b494 b4b4b49c b4b4b4a4 b4b4b4ac b4b4b4b4 b4b4b4bd b4b4b4c5 b4b4b4cd b4b4b4d5 b4b4b4de b4b4b4e6 b4b4b4ee b4b4b4f6 b4b4b4ff
|
||||||
ac00 ac08 ac10 ac18 ac20 ac29 ac31 ac39 ac41 ac4a ac52 ac5a ac62 ac6a ac73 ac7b ac83 ac8b ac94 ac9c aca4 acac acb4 acbd acc5 accd acd5 acde ace6 acee acf6 acff
|
acacac00 acacac08 acacac10 acacac18 acacac20 acacac29 acacac31 acacac39 acacac41 acacac4a acacac52 acacac5a acacac62 acacac6a acacac73 acacac7b acacac83 acacac8b acacac94 acacac9c acacaca4 acacacac acacacb4 acacacbd acacacc5 acacaccd acacacd5 acacacde acacace6 acacacee acacacf6 acacacff
|
||||||
a400 a408 a410 a418 a420 a429 a431 a439 a441 a44a a452 a45a a462 a46a a473 a47b a483 a48b a494 a49c a4a4 a4ac a4b4 a4bd a4c5 a4cd a4d5 a4de a4e6 a4ee a4f6 a4ff
|
a4a4a400 a4a4a408 a4a4a410 a4a4a418 a4a4a420 a4a4a429 a4a4a431 a4a4a439 a4a4a441 a4a4a44a a4a4a452 a4a4a45a a4a4a462 a4a4a46a a4a4a473 a4a4a47b a4a4a483 a4a4a48b a4a4a494 a4a4a49c a4a4a4a4 a4a4a4ac a4a4a4b4 a4a4a4bd a4a4a4c5 a4a4a4cd a4a4a4d5 a4a4a4de a4a4a4e6 a4a4a4ee a4a4a4f6 a4a4a4ff
|
||||||
9c00 9c08 9c10 9c18 9c20 9c29 9c31 9c39 9c41 9c4a 9c52 9c5a 9c62 9c6a 9c73 9c7b 9c83 9c8b 9c94 9c9c 9ca4 9cac 9cb4 9cbd 9cc5 9ccd 9cd5 9cde 9ce6 9cee 9cf6 9cff
|
9c9c9c00 9c9c9c08 9c9c9c10 9c9c9c18 9c9c9c20 9c9c9c29 9c9c9c31 9c9c9c39 9c9c9c41 9c9c9c4a 9c9c9c52 9c9c9c5a 9c9c9c62 9c9c9c6a 9c9c9c73 9c9c9c7b 9c9c9c83 9c9c9c8b 9c9c9c94 9c9c9c9c 9c9c9ca4 9c9c9cac 9c9c9cb4 9c9c9cbd 9c9c9cc5 9c9c9ccd 9c9c9cd5 9c9c9cde 9c9c9ce6 9c9c9cee 9c9c9cf6 9c9c9cff
|
||||||
9400 9408 9410 9418 9420 9429 9431 9439 9441 944a 9452 945a 9462 946a 9473 947b 9483 948b 9494 949c 94a4 94ac 94b4 94bd 94c5 94cd 94d5 94de 94e6 94ee 94f6 94ff
|
94949400 94949408 94949410 94949418 94949420 94949429 94949431 94949439 94949441 9494944a 94949452 9494945a 94949462 9494946a 94949473 9494947b 94949483 9494948b 94949494 9494949c 949494a4 949494ac 949494b4 949494bd 949494c5 949494cd 949494d5 949494de 949494e6 949494ee 949494f6 949494ff
|
||||||
8b00 8b08 8b10 8b18 8b20 8b29 8b31 8b39 8b41 8b4a 8b52 8b5a 8b62 8b6a 8b73 8b7b 8b83 8b8b 8b94 8b9c 8ba4 8bac 8bb4 8bbd 8bc5 8bcd 8bd5 8bde 8be6 8bee 8bf6 8bff
|
8b8b8b00 8b8b8b08 8b8b8b10 8b8b8b18 8b8b8b20 8b8b8b29 8b8b8b31 8b8b8b39 8b8b8b41 8b8b8b4a 8b8b8b52 8b8b8b5a 8b8b8b62 8b8b8b6a 8b8b8b73 8b8b8b7b 8b8b8b83 8b8b8b8b 8b8b8b94 8b8b8b9c 8b8b8ba4 8b8b8bac 8b8b8bb4 8b8b8bbd 8b8b8bc5 8b8b8bcd 8b8b8bd5 8b8b8bde 8b8b8be6 8b8b8bee 8b8b8bf6 8b8b8bff
|
||||||
8300 8308 8310 8318 8320 8329 8331 8339 8341 834a 8352 835a 8362 836a 8373 837b 8383 838b 8394 839c 83a4 83ac 83b4 83bd 83c5 83cd 83d5 83de 83e6 83ee 83f6 83ff
|
83838300 83838308 83838310 83838318 83838320 83838329 83838331 83838339 83838341 8383834a 83838352 8383835a 83838362 8383836a 83838373 8383837b 83838383 8383838b 83838394 8383839c 838383a4 838383ac 838383b4 838383bd 838383c5 838383cd 838383d5 838383de 838383e6 838383ee 838383f6 838383ff
|
||||||
7b00 7b08 7b10 7b18 7b20 7b29 7b31 7b39 7b41 7b4a 7b52 7b5a 7b62 7b6a 7b73 7b7b 7b83 7b8b 7b94 7b9c 7ba4 7bac 7bb4 7bbd 7bc5 7bcd 7bd5 7bde 7be6 7bee 7bf6 7bff
|
7b7b7b00 7b7b7b08 7b7b7b10 7b7b7b18 7b7b7b20 7b7b7b29 7b7b7b31 7b7b7b39 7b7b7b41 7b7b7b4a 7b7b7b52 7b7b7b5a 7b7b7b62 7b7b7b6a 7b7b7b73 7b7b7b7b 7b7b7b83 7b7b7b8b 7b7b7b94 7b7b7b9c 7b7b7ba4 7b7b7bac 7b7b7bb4 7b7b7bbd 7b7b7bc5 7b7b7bcd 7b7b7bd5 7b7b7bde 7b7b7be6 7b7b7bee 7b7b7bf6 7b7b7bff
|
||||||
7300 7308 7310 7318 7320 7329 7331 7339 7341 734a 7352 735a 7362 736a 7373 737b 7383 738b 7394 739c 73a4 73ac 73b4 73bd 73c5 73cd 73d5 73de 73e6 73ee 73f6 73ff
|
73737300 73737308 73737310 73737318 73737320 73737329 73737331 73737339 73737341 7373734a 73737352 7373735a 73737362 7373736a 73737373 7373737b 73737383 7373738b 73737394 7373739c 737373a4 737373ac 737373b4 737373bd 737373c5 737373cd 737373d5 737373de 737373e6 737373ee 737373f6 737373ff
|
||||||
6a00 6a08 6a10 6a18 6a20 6a29 6a31 6a39 6a41 6a4a 6a52 6a5a 6a62 6a6a 6a73 6a7b 6a83 6a8b 6a94 6a9c 6aa4 6aac 6ab4 6abd 6ac5 6acd 6ad5 6ade 6ae6 6aee 6af6 6aff
|
6a6a6a00 6a6a6a08 6a6a6a10 6a6a6a18 6a6a6a20 6a6a6a29 6a6a6a31 6a6a6a39 6a6a6a41 6a6a6a4a 6a6a6a52 6a6a6a5a 6a6a6a62 6a6a6a6a 6a6a6a73 6a6a6a7b 6a6a6a83 6a6a6a8b 6a6a6a94 6a6a6a9c 6a6a6aa4 6a6a6aac 6a6a6ab4 6a6a6abd 6a6a6ac5 6a6a6acd 6a6a6ad5 6a6a6ade 6a6a6ae6 6a6a6aee 6a6a6af6 6a6a6aff
|
||||||
6200 6208 6210 6218 6220 6229 6231 6239 6241 624a 6252 625a 6262 626a 6273 627b 6283 628b 6294 629c 62a4 62ac 62b4 62bd 62c5 62cd 62d5 62de 62e6 62ee 62f6 62ff
|
62626200 62626208 62626210 62626218 62626220 62626229 62626231 62626239 62626241 6262624a 62626252 6262625a 62626262 6262626a 62626273 6262627b 62626283 6262628b 62626294 6262629c 626262a4 626262ac 626262b4 626262bd 626262c5 626262cd 626262d5 626262de 626262e6 626262ee 626262f6 626262ff
|
||||||
5a00 5a08 5a10 5a18 5a20 5a29 5a31 5a39 5a41 5a4a 5a52 5a5a 5a62 5a6a 5a73 5a7b 5a83 5a8b 5a94 5a9c 5aa4 5aac 5ab4 5abd 5ac5 5acd 5ad5 5ade 5ae6 5aee 5af6 5aff
|
5a5a5a00 5a5a5a08 5a5a5a10 5a5a5a18 5a5a5a20 5a5a5a29 5a5a5a31 5a5a5a39 5a5a5a41 5a5a5a4a 5a5a5a52 5a5a5a5a 5a5a5a62 5a5a5a6a 5a5a5a73 5a5a5a7b 5a5a5a83 5a5a5a8b 5a5a5a94 5a5a5a9c 5a5a5aa4 5a5a5aac 5a5a5ab4 5a5a5abd 5a5a5ac5 5a5a5acd 5a5a5ad5 5a5a5ade 5a5a5ae6 5a5a5aee 5a5a5af6 5a5a5aff
|
||||||
5200 5208 5210 5218 5220 5229 5231 5239 5241 524a 5252 525a 5262 526a 5273 527b 5283 528b 5294 529c 52a4 52ac 52b4 52bd 52c5 52cd 52d5 52de 52e6 52ee 52f6 52ff
|
52525200 52525208 52525210 52525218 52525220 52525229 52525231 52525239 52525241 5252524a 52525252 5252525a 52525262 5252526a 52525273 5252527b 52525283 5252528b 52525294 5252529c 525252a4 525252ac 525252b4 525252bd 525252c5 525252cd 525252d5 525252de 525252e6 525252ee 525252f6 525252ff
|
||||||
4a00 4a08 4a10 4a18 4a20 4a29 4a31 4a39 4a41 4a4a 4a52 4a5a 4a62 4a6a 4a73 4a7b 4a83 4a8b 4a94 4a9c 4aa4 4aac 4ab4 4abd 4ac5 4acd 4ad5 4ade 4ae6 4aee 4af6 4aff
|
4a4a4a00 4a4a4a08 4a4a4a10 4a4a4a18 4a4a4a20 4a4a4a29 4a4a4a31 4a4a4a39 4a4a4a41 4a4a4a4a 4a4a4a52 4a4a4a5a 4a4a4a62 4a4a4a6a 4a4a4a73 4a4a4a7b 4a4a4a83 4a4a4a8b 4a4a4a94 4a4a4a9c 4a4a4aa4 4a4a4aac 4a4a4ab4 4a4a4abd 4a4a4ac5 4a4a4acd 4a4a4ad5 4a4a4ade 4a4a4ae6 4a4a4aee 4a4a4af6 4a4a4aff
|
||||||
4100 4108 4110 4118 4120 4129 4131 4139 4141 414a 4152 415a 4162 416a 4173 417b 4183 418b 4194 419c 41a4 41ac 41b4 41bd 41c5 41cd 41d5 41de 41e6 41ee 41f6 41ff
|
41414100 41414108 41414110 41414118 41414120 41414129 41414131 41414139 41414141 4141414a 41414152 4141415a 41414162 4141416a 41414173 4141417b 41414183 4141418b 41414194 4141419c 414141a4 414141ac 414141b4 414141bd 414141c5 414141cd 414141d5 414141de 414141e6 414141ee 414141f6 414141ff
|
||||||
3900 3908 3910 3918 3920 3929 3931 3939 3941 394a 3952 395a 3962 396a 3973 397b 3983 398b 3994 399c 39a4 39ac 39b4 39bd 39c5 39cd 39d5 39de 39e6 39ee 39f6 39ff
|
39393900 39393908 39393910 39393918 39393920 39393929 39393931 39393939 39393941 3939394a 39393952 3939395a 39393962 3939396a 39393973 3939397b 39393983 3939398b 39393994 3939399c 393939a4 393939ac 393939b4 393939bd 393939c5 393939cd 393939d5 393939de 393939e6 393939ee 393939f6 393939ff
|
||||||
3100 3108 3110 3118 3120 3129 3131 3139 3141 314a 3152 315a 3162 316a 3173 317b 3183 318b 3194 319c 31a4 31ac 31b4 31bd 31c5 31cd 31d5 31de 31e6 31ee 31f6 31ff
|
31313100 31313108 31313110 31313118 31313120 31313129 31313131 31313139 31313141 3131314a 31313152 3131315a 31313162 3131316a 31313173 3131317b 31313183 3131318b 31313194 3131319c 313131a4 313131ac 313131b4 313131bd 313131c5 313131cd 313131d5 313131de 313131e6 313131ee 313131f6 313131ff
|
||||||
2900 2908 2910 2918 2920 2929 2931 2939 2941 294a 2952 295a 2962 296a 2973 297b 2983 298b 2994 299c 29a4 29ac 29b4 29bd 29c5 29cd 29d5 29de 29e6 29ee 29f6 29ff
|
29292900 29292908 29292910 29292918 29292920 29292929 29292931 29292939 29292941 2929294a 29292952 2929295a 29292962 2929296a 29292973 2929297b 29292983 2929298b 29292994 2929299c 292929a4 292929ac 292929b4 292929bd 292929c5 292929cd 292929d5 292929de 292929e6 292929ee 292929f6 292929ff
|
||||||
2000 2008 2010 2018 2020 2029 2031 2039 2041 204a 2052 205a 2062 206a 2073 207b 2083 208b 2094 209c 20a4 20ac 20b4 20bd 20c5 20cd 20d5 20de 20e6 20ee 20f6 20ff
|
20202000 20202008 20202010 20202018 20202020 20202029 20202031 20202039 20202041 2020204a 20202052 2020205a 20202062 2020206a 20202073 2020207b 20202083 2020208b 20202094 2020209c 202020a4 202020ac 202020b4 202020bd 202020c5 202020cd 202020d5 202020de 202020e6 202020ee 202020f6 202020ff
|
||||||
1800 1808 1810 1818 1820 1829 1831 1839 1841 184a 1852 185a 1862 186a 1873 187b 1883 188b 1894 189c 18a4 18ac 18b4 18bd 18c5 18cd 18d5 18de 18e6 18ee 18f6 18ff
|
18181800 18181808 18181810 18181818 18181820 18181829 18181831 18181839 18181841 1818184a 18181852 1818185a 18181862 1818186a 18181873 1818187b 18181883 1818188b 18181894 1818189c 181818a4 181818ac 181818b4 181818bd 181818c5 181818cd 181818d5 181818de 181818e6 181818ee 181818f6 181818ff
|
||||||
1000 1008 1010 1018 1020 1029 1031 1039 1041 104a 1052 105a 1062 106a 1073 107b 1083 108b 1094 109c 10a4 10ac 10b4 10bd 10c5 10cd 10d5 10de 10e6 10ee 10f6 10ff
|
10101000 10101008 10101010 10101018 10101020 10101029 10101031 10101039 10101041 1010104a 10101052 1010105a 10101062 1010106a 10101073 1010107b 10101083 1010108b 10101094 1010109c 101010a4 101010ac 101010b4 101010bd 101010c5 101010cd 101010d5 101010de 101010e6 101010ee 101010f6 101010ff
|
||||||
0800 0808 0810 0818 0820 0829 0831 0839 0841 084a 0852 085a 0862 086a 0873 087b 0883 088b 0894 089c 08a4 08ac 08b4 08bd 08c5 08cd 08d5 08de 08e6 08ee 08f6 08ff
|
08080800 08080808 08080810 08080818 08080820 08080829 08080831 08080839 08080841 0808084a 08080852 0808085a 08080862 0808086a 08080873 0808087b 08080883 0808088b 08080894 0808089c 080808a4 080808ac 080808b4 080808bd 080808c5 080808cd 080808d5 080808de 080808e6 080808ee 080808f6 080808ff
|
||||||
0000 0008 0010 0018 0020 0029 0031 0039 0041 004a 0052 005a 0062 006a 0073 007b 0083 008b 0094 009c 00a4 00ac 00b4 00bd 00c5 00cd 00d5 00de 00e6 00ee 00f6 00ff
|
00000000 00000008 00000010 00000018 00000020 00000029 00000031 00000039 00000041 0000004a 00000052 0000005a 00000062 0000006a 00000073 0000007b 00000083 0000008b 00000094 0000009c 000000a4 000000ac 000000b4 000000bd 000000c5 000000cd 000000d5 000000de 000000e6 000000ee 000000f6 000000ff
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user