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:



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

def self.create_image_sym   #:nodoc:
  :gdImageCreate
end

.palette_classObject

:nodoc:



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

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

Instance Method Details

#alpha_blending=(bool) ⇒ Object

:nodoc:



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

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

#alpha_blending?Boolean

:nodoc:

Returns:

  • (Boolean)


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

def alpha_blending?   #:nodoc:
  false
end

#color2pixel(color) ⇒ Object

:nodoc:



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

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.



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

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:



725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
# File 'lib/gd2/image.rb', line 725

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:



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

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

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

:nodoc:



751
752
753
# File 'lib/gd2/image.rb', line 751

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

#to_true_colorObject

:nodoc:



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

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