// uninterlace rearranges the pixels in m to account for interlaced input. func uninterlace(m *image.Paletted) { var nPix []uint8 dx := m.Bounds().Dx() dy := m.Bounds().Dy() nPix = make([]uint8, dx*dy) offset := 0 // steps through the input by sequential scan lines. for _, pass := range interlacing { nOffset := pass.start * dx // steps through the output as defined by pass. for y := pass.start; y < dy; y += pass.skip { copy(nPix[nOffset:nOffset+dx], m.Pix[offset:offset+dx]) offset += dx nOffset += dx * pass.skip } } m.Pix = nPix }
func (d *decoder) uninterlace(m *image.Paletted) { if d.imageFields&ifInterlace == 0 { return } var nPix []uint8 dx := d.width dy := d.height nPix = make([]uint8, dx*dy) offset := 0 // steps through the input by sequentical scan lines. for _, pass := range interlacing { nOffset := pass.start * dx // steps through the output as defined by pass. for y := pass.start; y < dy; y += pass.skip { copy(nPix[nOffset:nOffset+dx], m.Pix[offset:offset+dx]) offset += dx nOffset += dx * pass.skip } } m.Pix = nPix }