]> Cypherpunks repositories - gostls13.git/commitdiff
image/gif: enable images with <8 bits per pixel.
authorRob Pike <r@golang.org>
Mon, 16 May 2011 23:00:41 +0000 (16:00 -0700)
committerRob Pike <r@golang.org>
Mon, 16 May 2011 23:00:41 +0000 (16:00 -0700)
R=nigeltao
CC=golang-dev
https://golang.org/cl/4552042

src/pkg/image/decode_test.go
src/pkg/image/gif/reader.go
src/pkg/image/testdata/video-001.5bpp.gif [new file with mode: 0644]

index a0fba6fdbaa351d482c536e609af403ae6f1ca3f..c957c8209e96761de6c53fdd33d70cf74761cfb8 100644 (file)
@@ -30,6 +30,7 @@ var imageTests = []imageTest{
        // to GIF loses significant image quality.
        {"testdata/video-001.gif", 64 << 8},
        {"testdata/video-001.interlaced.gif", 64 << 8},
+       {"testdata/video-001.5bpp.gif", 128 << 8},
        // JPEG is a lossy format and hence needs a non-zero tolerance.
        {"testdata/video-001.jpeg", 8 << 8},
        {"testdata/video-001.png", 0},
index e27b74b64da1974f17dfe888f51376d330cbccae..5dd404036ce717b1c7a035b3bd60a00531db807a 100644 (file)
@@ -173,11 +173,10 @@ Loop:
                        if err != nil {
                                return err
                        }
-                       if litWidth > 8 {
+                       if litWidth < 2 || litWidth > 8 {
                                return fmt.Errorf("gif: pixel size in decode out of range: %d", litWidth)
                        }
-                       // A wonderfully Go-like piece of magic. Unfortunately it's only at its
-                       // best for 8-bit pixels.
+                       // A wonderfully Go-like piece of magic.
                        lzwr := lzw.NewReader(&blockReader{r: d.r}, lzw.LSB, int(litWidth))
                        if _, err = io.ReadFull(lzwr, m.Pix); err != nil {
                                break
@@ -379,7 +378,6 @@ func (d *decoder) uninterlace(m *image.Paletted) {
 
 // Decode reads a GIF image from r and returns the first embedded
 // image as an image.Image.
-// Limitation: The file must be 8 bits per pixel.
 func Decode(r io.Reader) (image.Image, os.Error) {
        var d decoder
        if err := d.decode(r, false); err != nil {
@@ -397,7 +395,6 @@ type GIF struct {
 
 // DecodeAll reads a GIF image from r and returns the sequential frames
 // and timing information.
-// Limitation: The file must be 8 bits per pixel.
 func DecodeAll(r io.Reader) (*GIF, os.Error) {
        var d decoder
        if err := d.decode(r, false); err != nil {
diff --git a/src/pkg/image/testdata/video-001.5bpp.gif b/src/pkg/image/testdata/video-001.5bpp.gif
new file mode 100644 (file)
index 0000000..ce53104
Binary files /dev/null and b/src/pkg/image/testdata/video-001.5bpp.gif differ