Module: ChunkyPNG::Canvas::Adam7Interlacing

### Home Classes Methods

### In Files

- lib/chunky_png/canvas/adam7_interlacing.rb

### Methods

- #adam7_extract_pass
- #adam7_merge_pass
- #adam7_multiplier_offset
- #adam7_pass_size
- #adam7_pass_sizes

### Files

- BENCHMARKING.rdoc
- CHANGELOG.rdoc
- CONTRIBUTING.rdoc
- README.rdoc

### Class/Module Index

Quicksearch

- ChunkyPNG
- ChunkyPNG::CRCMismatch
- ChunkyPNG::Canvas
- ChunkyPNG::Canvas::Adam7Interlacing
- ChunkyPNG::Canvas::DataUrlExporting
- ChunkyPNG::Canvas::DataUrlImporting
- ChunkyPNG::Canvas::Drawing
- ChunkyPNG::Canvas::Masking
- ChunkyPNG::Canvas::Operations
- ChunkyPNG::Canvas::PNGDecoding
- ChunkyPNG::Canvas::PNGEncoding
- ChunkyPNG::Canvas::Resampling
- ChunkyPNG::Canvas::StreamExporting
- ChunkyPNG::Canvas::StreamImporting
- ChunkyPNG::Chunk
- ChunkyPNG::Chunk::Base
- ChunkyPNG::Chunk::CompressedText
- ChunkyPNG::Chunk::End
- ChunkyPNG::Chunk::Generic
- ChunkyPNG::Chunk::Header
- ChunkyPNG::Chunk::ImageData
- ChunkyPNG::Chunk::InternationalText
- ChunkyPNG::Chunk::Palette
- ChunkyPNG::Chunk::Text
- ChunkyPNG::Chunk::Transparency
- ChunkyPNG::Color
- ChunkyPNG::Datastream
- ChunkyPNG::Dimension
- ChunkyPNG::Exception
- ChunkyPNG::ExpectationFailed
- ChunkyPNG::Image
- ChunkyPNG::NotSupported
- ChunkyPNG::OutOfBounds
- ChunkyPNG::Palette
- ChunkyPNG::Point
- ChunkyPNG::RMagick
- ChunkyPNG::SignatureMismatch
- ChunkyPNG::Vector
- Enumerable
- String

No matching classes.

# ChunkyPNG::Canvas::Adam7Interlacing

Methods for decoding and encoding Adam7 interlacing.

Adam7 interlacing extracts 7 pass images out of a single image, that can be encoded to a stream separately so the image can be built up progressively. The module is included into ChunkyPNG canvas and is used to extract the pass images from the original image, or to reconstruct an original image from separate pass images.

### Public Instance Methods

adam7_extract_pass(pass, canvas) click to toggle source

Extracts a pass from a complete image @param [Integer] pass The pass number, should be in 0..6. @param [ChunkyPNG::Canvas] canvas The image that is being deconstructed. @return [ChunkyPNG::Canvas] The extracted pass image.

    # File lib/chunky_png/canvas/adam7_interlacing.rb, line 57
    def adam7_extract_pass(pass, canvas)
      x_shift, x_offset, y_shift, y_offset = adam7_multiplier_offset(pass)
      sm_pixels = []

      y_offset.step(canvas.height - 1, 1 << y_shift) do |y|
        x_offset.step(canvas.width - 1, 1 << x_shift) do |x|
          sm_pixels << canvas[x, y]
        end
      end

      new_canvas_args = adam7_pass_size(pass, canvas.width, canvas.height) + [sm_pixels]
      ChunkyPNG::Canvas.new(*new_canvas_args)
    end

adam7_merge_pass(pass, canvas, subcanvas) click to toggle source

Merges a pass image into a total image that is being constructed. @param [Integer] pass The pass number, should be in 0..6. @param [ChunkyPNG::Canvas] canvas The image that is being constructed. @param [ChunkyPNG::Canvas] subcanvas The pass image that should be merged

    # File lib/chunky_png/canvas/adam7_interlacing.rb, line 42
    def adam7_merge_pass(pass, canvas, subcanvas)
      x_shift, x_offset, y_shift, y_offset = adam7_multiplier_offset(pass)
      for y in 0...subcanvas.height do
        for x in 0...subcanvas.width do
          new_x = (x << x_shift) | x_offset
          new_y = (y << y_shift) | y_offset
          canvas[new_x, new_y] = subcanvas[x, y]
        end
      end
    end

adam7_multiplier_offset(pass) click to toggle source

Returns an array with the x-shift, x-offset, y-shift and y-offset for the requested pass. @param [Integer] pass The pass number, should be in 0..6.

    # File lib/chunky_png/canvas/adam7_interlacing.rb, line 14
    def adam7_multiplier_offset(pass)
      [3 - (pass >> 1), (pass & 1 == 0) ? 0 : 8 >> ((pass + 1) >> 1),
       pass == 0 ? 3 : 3 - ((pass - 1) >> 1), (pass == 0 || pass & 1 == 1) ? 0 : 8 >> (pass >> 1)]
    end

adam7_pass_size(pass, original_width, original_height) click to toggle source

Returns the pixel dimensions of the requested pass. @param [Integer] pass The pass number, should be in 0..6. @param [Integer] original_width The width of the original image. @param [Integer] original_height The height of the original image.

    # File lib/chunky_png/canvas/adam7_interlacing.rb, line 23
    def adam7_pass_size(pass, original_width, original_height)
      x_shift, x_offset, y_shift, y_offset = adam7_multiplier_offset(pass)
      [ (original_width  - x_offset + (1 << x_shift) - 1) >> x_shift,
        (original_height - y_offset + (1 << y_shift) - 1) >> y_shift]
    end

adam7_pass_sizes(original_width, original_height) click to toggle source

Returns an array of the dimension of all the pass images. @param [Integer] original_width The width of the original image. @param [Integer] original_height The height of the original image. @return [Array<Array<Integer>>] Returns an array with 7 pairs of dimensions. @see adam7_pass_size

    # File lib/chunky_png/canvas/adam7_interlacing.rb, line 34
    def adam7_pass_sizes(original_width, original_height)
      (0...7).map { |pass| adam7_pass_size(pass, original_width, original_height) }
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.