Class: ZPNG::Chunk::IHDR
- Inherits:
-
ZPNG::Chunk
- Object
- ZPNG::Chunk
- ZPNG::Chunk::IHDR
- Defined in:
- lib/zpng/chunk.rb
Direct Known Subclasses
Constant Summary collapse
- PALETTE_USED =
1
- COLOR_USED =
2
- ALPHA_USED =
4
- SAMPLES_PER_COLOR =
Each pixel is an R,G,B triple, followed by an alpha sample.
{ COLOR_GRAYSCALE => 1, COLOR_RGB => 3, COLOR_INDEXED => 1, COLOR_GRAY_ALPHA => 2, COLOR_RGBA => 4 }
- ALLOWED_DEPTHS =
{ COLOR_GRAYSCALE => [ 1, 2, 4, 8, 16 ], COLOR_RGB => [ 8, 16 ], COLOR_INDEXED => [ 1, 2, 4, 8 ], COLOR_GRAY_ALPHA => [ 8, 16 ], COLOR_RGBA => [ 8, 16 ], }
- FORMAT =
'NNC5'
Constants inherited from ZPNG::Chunk
Instance Attribute Summary collapse
-
#color ⇒ Object
Returns the value of attribute color.
-
#compression ⇒ Object
Returns the value of attribute compression.
-
#depth ⇒ Object
Returns the value of attribute depth.
-
#filter ⇒ Object
Returns the value of attribute filter.
-
#height ⇒ Object
Returns the value of attribute height.
-
#interlace ⇒ Object
Returns the value of attribute interlace.
-
#width ⇒ Object
Returns the value of attribute width.
Attributes inherited from ZPNG::Chunk
#crc, #data, #idx, #offset, #size, #type
Instance Method Summary collapse
- #alpha_used? ⇒ Boolean
-
#bpp ⇒ Object
bits per pixel.
- #color_used? ⇒ Boolean
- #export_data ⇒ Object
- #grayscale? ⇒ Boolean
-
#initialize(x) ⇒ IHDR
constructor
A new instance of IHDR.
- #inspect(verbosity = 10) ⇒ Object
- #palette_used? ⇒ Boolean
Methods inherited from ZPNG::Chunk
#check, #crc_ok?, #export, #fix_crc!, from_stream, #valid?
Methods included from DeepCopyable
Constructor Details
#initialize(x) ⇒ IHDR
Returns a new instance of IHDR.
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/zpng/chunk.rb', line 135 def initialize x super vars = %w'width height depth color compression filter interlace' # order is important if x.respond_to?(:read) # IO elsif x.respond_to?(:[]) # Hash vars.each{ |k| instance_variable_set "@#{k}", x[k.to_sym] } raise "[!] width not set" unless @width raise "[!] height not set" unless @height # allow easier image creation like # img = Image.new :width => 16, :height => 16, :bpp => 4, :color => false # img = Image.new :width => 16, :height => 16, :bpp => 1, :color => true # img = Image.new :width => 16, :height => 16, :bpp => 32 if x[:bpp] unless [true,false,nil].include?(@color) raise "[!] :color must be either 'true' or 'false' when :bpp is set" end if @depth raise "[!] don't use :depth when :bpp is set" end @color, @depth = case x[:bpp] when 1,2,4,8; [ @color ? COLOR_INDEXED : COLOR_GRAYSCALE, x[:bpp] ] when 16; raise "[!] I don't know how to make COLOR 16 bpp PNG. do you?" if @color [ COLOR_GRAY_ALPHA, 8 ] when 24; [ COLOR_RGB, 8 ] when 32; [ COLOR_RGBA, 8 ] else raise "[!] unsupported bpp=#{x[:bpp].inspect}" end end @color ||= COLOR_RGBA @depth ||= 8 @compression ||= 0 @filter ||= 0 @interlace ||= 0 unless ALLOWED_DEPTHS[@color].include?(@depth) raise "[!] invalid color mode (#{@color.inspect}) / bit depth (#{@depth.inspect}) combination" end end if data data.unpack(FORMAT).each_with_index do |value,idx| instance_variable_set "@#{vars[idx]}", value end end end |
Instance Attribute Details
#color ⇒ Object
Returns the value of attribute color.
99 100 101 |
# File 'lib/zpng/chunk.rb', line 99 def color @color end |
#compression ⇒ Object
Returns the value of attribute compression.
99 100 101 |
# File 'lib/zpng/chunk.rb', line 99 def compression @compression end |
#depth ⇒ Object
Returns the value of attribute depth.
99 100 101 |
# File 'lib/zpng/chunk.rb', line 99 def depth @depth end |
#filter ⇒ Object
Returns the value of attribute filter.
99 100 101 |
# File 'lib/zpng/chunk.rb', line 99 def filter @filter end |
#height ⇒ Object
Returns the value of attribute height.
99 100 101 |
# File 'lib/zpng/chunk.rb', line 99 def height @height end |
#interlace ⇒ Object
Returns the value of attribute interlace.
99 100 101 |
# File 'lib/zpng/chunk.rb', line 99 def interlace @interlace end |
#width ⇒ Object
Returns the value of attribute width.
99 100 101 |
# File 'lib/zpng/chunk.rb', line 99 def width @width end |
Instance Method Details
#alpha_used? ⇒ Boolean
208 209 210 |
# File 'lib/zpng/chunk.rb', line 208 def alpha_used? (@color & ALPHA_USED) != 0 end |
#bpp ⇒ Object
bits per pixel
192 193 194 |
# File 'lib/zpng/chunk.rb', line 192 def bpp SAMPLES_PER_COLOR[@color] * depth end |
#color_used? ⇒ Boolean
196 197 198 |
# File 'lib/zpng/chunk.rb', line 196 def color_used? (@color & COLOR_USED) != 0 end |
#export_data ⇒ Object
187 188 189 |
# File 'lib/zpng/chunk.rb', line 187 def export_data [@width, @height, @depth, @color, @compression, @filter, @interlace].pack(FORMAT) end |
#grayscale? ⇒ Boolean
200 201 202 |
# File 'lib/zpng/chunk.rb', line 200 def grayscale? !color_used? end |
#inspect(verbosity = 10) ⇒ Object
212 213 214 215 216 217 218 |
# File 'lib/zpng/chunk.rb', line 212 def inspect verbosity = 10 vars = instance_variables - [:@type, :@crc, :@data, :@size] vars -= [:@idx] if verbosity <= 0 super.sub(/ *>$/,'') + ", " + vars.sort.map{ |var| "#{var.to_s.tr('@','')}=#{instance_variable_get(var)}" }. join(", ") + ">" end |
#palette_used? ⇒ Boolean
204 205 206 |
# File 'lib/zpng/chunk.rb', line 204 def palette_used? (@color & PALETTE_USED) != 0 end |