def deinterlace
      return self unless interlaced?

      # copy all but 'interlace' header params
      h = Hash[*%w'width height depth color compression filter'.map{ |k| [k.to_sym, hdr.send(k)] }.flatten]

      # don't auto-add palette chunk
      h[:palette] = nil

      # create new img
      new_img = self.class.new h

      # copy all but hdr/imagedata/end chunks
      chunks.each do |chunk|
        next if chunk.is_a?(Chunk::IHDR)
        next if chunk.is_a?(Chunk::IDAT)
        next if chunk.is_a?(Chunk::IEND)
        new_img.chunks << chunk.deep_copy
      end

      # pixel-by-pixel copy
      each_pixel do |c,x,y|
        new_img[x,y] = c
      end

      new_img
    end
def deinterlace
      return self unless interlaced?

      # copy all but 'interlace' header params
      h = Hash[*%w'width height depth color compression filter'.map{ |k| [k.to_sym, hdr.send(k)] }.flatten]

      # don't auto-add palette chunk
      h[:palette] = nil

      # create new img
      new_img = self.class.new h

      # copy all but hdr/imagedata/end chunks
      chunks.each do |chunk|
        next if chunk.is_a?(Chunk::IHDR)
        next if chunk.is_a?(Chunk::IDAT)
        next if chunk.is_a?(Chunk::IEND)
        new_img.chunks << chunk.deep_copy
      end

      # pixel-by-pixel copy
      each_pixel do |c,x,y|
        new_img[x,y] = c
      end

      new_img
    end
def deinterlace return self unless interlaced? # copy all but 'interlace' header params h = Hash [ %w' width height depth color compression filter ' . map { | k | [ k . to_sym , hdr . send ( k ) ] } . flatten ] # don't auto-add palette chunk h [ :palette ] = nil # create new img new_img = self . class . new h # copy all but hdr/imagedata/end chunks chunks . each do | chunk | next if chunk . is_a? ( Chunk :: IHDR ) next if chunk . is_a? ( Chunk :: IDAT ) next if chunk . is_a? ( Chunk :: IEND ) new_img . chunks << chunk . deep_copy end # pixel-by-pixel copy each_pixel do | c , x , y | new_img [ x , y ] = c end new_img end
returns new deinterlaced image if deinterlaced
 OR returns self if no need to deinterlace
returns new deinterlaced image if deinterlaced OR returns self if no need to deinterlace