Sha256: 6ecb149c7a49b9baeef019e5a498259360aac6d3b28b723baccbdcbe2dcec0c3

Contents?: true

Size: 1.55 KB

Versions: 3

Compression:

Stored size: 1.55 KB

Contents

module ChunkyPNG
  class Canvas
    
    # The ChunkyPNG::Canvas::Resampling module defines methods to perform image resampling to 
    # a {ChunkyPNG::Canvas}.
    #
    # Currently, only the nearest neighbor algorithm is implemented. Bilinear and cubic
    # algorithms may be added later on.
    #
    # @see ChunkyPNG::Canvas
    module Resampling
      
      # Resamples the canvas.
      # @param [Integer] new_width The width of the resamples canvas.
      # @param [Integer] new_height The height of the resamples canvas.
      # @param [ChunkyPNG::Canvas] A new canvas instance with the resamples pixels.
      def resample_nearest_neighbor!(new_width, new_height)
        
        resampled_image = self.class.new(new_width.to_i, new_height.to_i)
        
        width_ratio  = width.to_f / new_width.to_f
        height_ratio = height.to_f / new_height.to_f

        pixels = []
        for y in 1..new_height do
          source_y   = (y - 0.5) * height_ratio + 0.5
          input_y    = source_y.to_i

          for x in 1..new_width do
            source_x = (x - 0.5) * width_ratio + 0.5
            input_x  = source_x.to_i

            pixels << get_pixel([input_x - 1, 0].max, [input_y - 1, 0].max)
          end
        end
        
        replace_canvas!(new_width.to_i, new_height.to_i, pixels)
      end
      
      def resample_nearest_neighbor(new_width, new_height)
        dup.resample_nearest_neighbor!(new_width, new_height)
      end
      
      alias_method :resample, :resample_nearest_neighbor
      alias_method :resize, :resample
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
chunky_png-1.0.1 lib/chunky_png/canvas/resampling.rb
chunky_png-1.0.0 lib/chunky_png/canvas/resampling.rb
chunky_png-1.0.0.rc2 lib/chunky_png/canvas/resampling.rb