Class: ChunkyPNG::Chunk::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/chunky_png/chunk.rb

Overview

This class is abstract.

The base chunk class is the superclass for every chunk type. It contains methods to write the chunk to an output stream.

A subclass should implement the content method, which gets called when the chunk gets written to a PNG datastream

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, attributes = {}) ⇒ Base

Initializes the chunk instance.

Parameters:

  • type (String)

    The four character chunk type indicator.

  • attributes (Hash) (defaults to: {})

    A hash of attributes to set on this chunk.



69
70
71
72
# File 'lib/chunky_png/chunk.rb', line 69

def initialize(type, attributes = {})
  self.type = type
  attributes.each { |k, v| send("#{k}=", v) }
end

Instance Attribute Details

#typeString

The four-character type indicator for the chunk. This field is used to find the correct class for a chunk when it is loaded from a PNG stream.

Returns:

  • (String)


64
65
66
# File 'lib/chunky_png/chunk.rb', line 64

def type
  @type
end

Instance Method Details

#write(io) ⇒ Object

Writes the chunk to the IO stream.

It will call the content method to get the content for this chunk, and will calculate and append the checksum automatically.

Parameters:

  • io (IO)

    The IO stream to write to.



88
89
90
# File 'lib/chunky_png/chunk.rb', line 88

def write(io)
  write_with_crc(io, content || "")
end

#write_with_crc(io, content) ⇒ Object

Writes the chunk to the IO stream, using the provided content. The checksum will be calculated and appended to the stream.

Parameters:

  • io (IO)

    The IO stream to write to.

  • content (String)

    The content for this chunk.



78
79
80
81
# File 'lib/chunky_png/chunk.rb', line 78

def write_with_crc(io, content)
  io << [content.length].pack("N") << type << content
  io << [Zlib.crc32(content, Zlib.crc32(type))].pack("N")
end