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:



710
711
712
# File 'lib/gd2/image.rb', line 710

def self.create_image_sym   #:nodoc:
  :gdImageCreate
end

.palette_classObject

:nodoc:



714
715
716
# File 'lib/gd2/image.rb', line 714

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

Instance Method Details

#alpha_blending=(bool) ⇒ Object

:nodoc:



730
731
732
# File 'lib/gd2/image.rb', line 730

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

#alpha_blending?Boolean

:nodoc:

Returns:

  • (Boolean)


726
727
728
# File 'lib/gd2/image.rb', line 726

def alpha_blending?   #:nodoc:
  false
end

#color2pixel(color) ⇒ Object

:nodoc:



722
723
724
# File 'lib/gd2/image.rb', line 722

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.



767
768
769
770
771
772
# File 'lib/gd2/image.rb', line 767

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
  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:



734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
# File 'lib/gd2/image.rb', line 734

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:



718
719
720
# File 'lib/gd2/image.rb', line 718

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

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

:nodoc:



760
761
762
# File 'lib/gd2/image.rb', line 760

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

#to_true_colorObject

:nodoc:



751
752
753
754
755
756
757
758
# File 'lib/gd2/image.rb', line 751

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