Class: GD2::Image::IndexedColor

Inherits:
GD2::Image show all
Defined in:
lib/gd2/image.rb

Overview

Description

IndexedColor images select pixel colors indirectly through a palette of up to 256 colors. Use Image#palette to access the associated Palette object.

Instance Attribute Summary

Attributes inherited from GD2::Image

#image_ptr, #palette

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from GD2::Image

#==, #[], #[]=, #aspect, #clipping, #clips?, #compare, #copy_from, #copy_from_rotated, create_image_ptr, #crop, #crop!, #draw, #dup, #each, #export, #gd, #gd2, #get_pixel, #gif, #height, import, #init_with_image, #init_with_size, #inspect, #interlaced=, #interlaced?, #jpeg, load, new, #png, #polar_transform, #polar_transform!, #resize, #resize!, #rotate, #rotate!, #save_alpha=, #save_alpha?, #set_pixel, #sharpen, #size, #transparent, #transparent=, #true_color?, #uncrop, #uncrop!, #wbmp, #width, #with_clipping

Class Method Details

.create_image_symObject

:nodoc:



688
689
690
# File 'lib/gd2/image.rb', line 688

def self.create_image_sym   #:nodoc:
  :gdImageCreate
end

.palette_classObject

:nodoc:



692
693
694
# File 'lib/gd2/image.rb', line 692

def self.palette_class  #:nodoc:
  Palette::IndexedColor
end

Instance Method Details

#alpha_blending=(bool) ⇒ Object

:nodoc:



708
709
710
# File 'lib/gd2/image.rb', line 708

def alpha_blending=(bool)   #:nodoc:
  raise 'Alpha blending mode not available for indexed color images' if bool
end

#alpha_blending?Boolean

:nodoc:

Returns:

  • (Boolean)


704
705
706
# File 'lib/gd2/image.rb', line 704

def alpha_blending?   #:nodoc:
  false
end

#color2pixel(color) ⇒ Object

:nodoc:



700
701
702
# File 'lib/gd2/image.rb', line 700

def color2pixel(color)  #:nodoc:
  color.from_palette?(palette) ? color.index : palette.exact!(color).index
end

#merge_from(other, dst_x, dst_y, src_x, src_y, w, h, pct, gray = false) ⇒ Object

Like Image#merge_from except an optional final argument can be specified to preserve the hue of the source by converting the destination pixels to grey scale before the merge.



745
746
747
748
749
750
# File 'lib/gd2/image.rb', line 745

def merge_from(other, dst_x, dst_y, src_x, src_y, w, h, pct, gray = false)
  return super(other, dst_x, dst_y, src_x, src_y, w, h, pct) unless gray
  ::GD2::GD2FFI.send(:gdImageCopyMergeGray, image_ptr, other.image_ptr,
    dst_x.to_i, dst_y.to_i, src_x.to_i, src_y.to_i, w.to_i, h.to_i, pct.to_percent.round.to_i)
  self
end

#optimize_paletteObject

:nodoc:



712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
# File 'lib/gd2/image.rb', line 712

def optimize_palette  #:nodoc:
  # first map duplicate colors to a single palette index
  map, cache = palette.inject([{}, Array.new(MAX_COLORS)]) do |ary, color|
    ary.at(0)[color.rgba] = color.index
    ary.at(1)[color.index] = color.rgba
    ary
  end
  each_with_index do |row, y|
    row.each_with_index do |pixel, x|
      set_pixel(x, y, map[cache.at(pixel)])
    end
  end

  # now clean up the palette
  palette.deallocate_unused
end

#pixel2color(pixel) ⇒ Object

:nodoc:



696
697
698
# File 'lib/gd2/image.rb', line 696

def pixel2color(pixel)  #:nodoc:
  palette[pixel]
end

#to_indexed_color(colors = MAX_COLORS, dither = true) ⇒ Object

:nodoc:



738
739
740
# File 'lib/gd2/image.rb', line 738

def to_indexed_color(colors = MAX_COLORS, dither = true)  #:nodoc:
  palette.used <= colors ? self : super
end

#to_true_colorObject

:nodoc:



729
730
731
732
733
734
735
736
# File 'lib/gd2/image.rb', line 729

def to_true_color   #:nodoc:
  sz = size
  obj = TrueColor.new(*sz)
  obj.alpha_blending = false
  obj.copy_from(self, 0, 0, 0, 0, *sz)
  obj.alpha_blending = true
  obj
end