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:



698
699
700
# File 'lib/gd2/image.rb', line 698

def self.create_image_sym   #:nodoc:
  :gdImageCreate
end

.palette_classObject

:nodoc:



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

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

Instance Method Details

#alpha_blending=(bool) ⇒ Object

:nodoc:



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

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

#alpha_blending?Boolean

:nodoc:

Returns:

  • (Boolean)


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

def alpha_blending?   #:nodoc:
  false
end

#color2pixel(color) ⇒ Object

:nodoc:



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

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.



755
756
757
758
759
760
# File 'lib/gd2/image.rb', line 755

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:



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

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:



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

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

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

:nodoc:



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

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

#to_true_colorObject

:nodoc:



739
740
741
742
743
744
745
746
# File 'lib/gd2/image.rb', line 739

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