diff options
author | Volker Dobler <dr.volker.dobler@gmail.com> | 2013-03-04 14:54:36 +1100 |
---|---|---|
committer | Volker Dobler <dr.volker.dobler@gmail.com> | 2013-03-04 14:54:36 +1100 |
commit | 0a38b59eb447cfd73ff810d67514a9cea8e51e1e (patch) | |
tree | 9f8b5cd935389eb080b858e78582ea070d41443e /src/pkg/image | |
parent | bbe3b23d433fac4ea8f2dc0219523f9a18888e51 (diff) | |
download | go-0a38b59eb447cfd73ff810d67514a9cea8e51e1e.tar.gz |
image/png: always set up palette during DecodeConfig
The old code would decode the palette only for 8-bit
images during a DecodeConfig.
This CL keeps the behavior for 8-bit images and sets
up the decoded palette also for 1, 2 and 4-bit images.
Fixes issue 4279.
R=golang-dev, nigeltao
CC=golang-dev
https://codereview.appspot.com/7421048
Committer: Nigel Tao <nigeltao@golang.org>
Diffstat (limited to 'src/pkg/image')
-rw-r--r-- | src/pkg/image/png/reader.go | 5 | ||||
-rw-r--r-- | src/pkg/image/png/reader_test.go | 33 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/pkg/image/png/reader.go b/src/pkg/image/png/reader.go index ff837331f..a6bf86ede 100644 --- a/src/pkg/image/png/reader.go +++ b/src/pkg/image/png/reader.go @@ -652,10 +652,11 @@ func DecodeConfig(r io.Reader) (image.Config, error) { } return image.Config{}, err } - if d.stage == dsSeenIHDR && d.cb != cbP8 { + paletted := d.cb == cbP8 || d.cb == cbP4 || d.cb == cbP2 || d.cb == cbP1 + if d.stage == dsSeenIHDR && !paletted { break } - if d.stage == dsSeenPLTE && d.cb == cbP8 { + if d.stage == dsSeenPLTE && paletted { break } } diff --git a/src/pkg/image/png/reader_test.go b/src/pkg/image/png/reader_test.go index b682bd096..ac0d949a9 100644 --- a/src/pkg/image/png/reader_test.go +++ b/src/pkg/image/png/reader_test.go @@ -38,6 +38,14 @@ var filenames = []string{ "basn6a16", } +var filenamesPaletted = []string{ + "basn3p01", + "basn3p02", + "basn3p04", + "basn3p08", + "basn3p08-trns", +} + var filenamesShort = []string{ "basn0g01", "basn0g04-31", @@ -278,6 +286,31 @@ func TestReaderError(t *testing.T) { } } +func TestPalettedDecodeConfig(t *testing.T) { + for _, fn := range filenamesPaletted { + f, err := os.Open("testdata/pngsuite/" + fn + ".png") + if err != nil { + t.Errorf("%s: open failed: %v", fn, err) + continue + } + defer f.Close() + cfg, err := DecodeConfig(f) + if err != nil { + t.Errorf("%s: %v", fn, err) + continue + } + pal, ok := cfg.ColorModel.(color.Palette) + if !ok { + t.Errorf("%s: expected paletted color model", fn) + continue + } + if pal == nil { + t.Errorf("%s: palette not initialized", fn) + continue + } + } +} + func benchmarkDecode(b *testing.B, filename string, bytesPerPixel int) { b.StopTimer() data, err := ioutil.ReadFile(filename) |