class Branding::PNG::Imagedata

Private class for holding and deflating image data

Public Class Methods

new(data: nil, scanline_width: 0, color_channels: 3) click to toggle source
# File lib/branding/png.rb, line 17
def initialize(data: nil, scanline_width: 0, color_channels: 3)
  @scanline_width = scanline_width
  @color_channels = color_channels

  zstream = Zlib::Inflate.new
  zstream << data
  @inflated = zstream.finish
  zstream.close
end

Public Instance Methods

each() { |byte| ... } click to toggle source

yields byte

# File lib/branding/png.rb, line 29
def each
  @inflated.each_byte do |byte|
    yield byte
  end
end
each_pixel() { |pixel(*rgba)| ... } click to toggle source
# File lib/branding/png.rb, line 51
def each_pixel
  each_scanline do |scanline|
    scanline.each_slice(@color_channels) do |*rgba|
      yield Pixel.new(*rgba)
    end
  end
end
each_scanline() { |recon| ... } click to toggle source
# File lib/branding/png.rb, line 35
def each_scanline
  # the number of bytes is + 1 because of the filter byte
  bytes_in_scanline = @scanline_width * @color_channels + 1

  previous_scanline = nil

  each_slice(bytes_in_scanline) do |scanline|
    filter_bit, *rest = *scanline
    filter = Filter.new(filter_bit, rest, previous_scanline, @color_channels)

    recon = filter.reconstructed_scanline
    yield recon
    previous_scanline = recon
  end
end