summaryrefslogtreecommitdiff
path: root/src/pkg/image
diff options
context:
space:
mode:
authorVolker Dobler <dr.volker.dobler@gmail.com>2013-03-04 14:54:36 +1100
committerVolker Dobler <dr.volker.dobler@gmail.com>2013-03-04 14:54:36 +1100
commit0a38b59eb447cfd73ff810d67514a9cea8e51e1e (patch)
tree9f8b5cd935389eb080b858e78582ea070d41443e /src/pkg/image
parentbbe3b23d433fac4ea8f2dc0219523f9a18888e51 (diff)
downloadgo-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.go5
-rw-r--r--src/pkg/image/png/reader_test.go33
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)