summaryrefslogtreecommitdiff
path: root/src/image/gif/writer.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/image/gif/writer.go')
-rw-r--r--src/image/gif/writer.go18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/image/gif/writer.go b/src/image/gif/writer.go
index 15cd40fad..49abde704 100644
--- a/src/image/gif/writer.go
+++ b/src/image/gif/writer.go
@@ -233,10 +233,20 @@ func (e *encoder) writeImageBlock(pm *image.Paletted, delay int) {
e.writeByte(uint8(litWidth)) // LZW Minimum Code Size.
lzww := lzw.NewWriter(blockWriter{e: e}, lzw.LSB, litWidth)
- _, e.err = lzww.Write(pm.Pix)
- if e.err != nil {
- lzww.Close()
- return
+ if dx := b.Dx(); dx == pm.Stride {
+ _, e.err = lzww.Write(pm.Pix)
+ if e.err != nil {
+ lzww.Close()
+ return
+ }
+ } else {
+ for i, y := 0, b.Min.Y; y < b.Max.Y; i, y = i+pm.Stride, y+1 {
+ _, e.err = lzww.Write(pm.Pix[i : i+dx])
+ if e.err != nil {
+ lzww.Close()
+ return
+ }
+ }
}
lzww.Close()
e.writeByte(0x00) // Block Terminator.