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
- SIZE =
13
- FORMAT =
'NNC5'
- 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 ], }
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.
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 186 |
# File 'lib/zpng/chunk.rb', line 136 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
210 211 212 |
# File 'lib/zpng/chunk.rb', line 210 def alpha_used? (@color & ALPHA_USED) != 0 end |
#bpp ⇒ Object
bits per pixel
193 194 195 196 |
# File 'lib/zpng/chunk.rb', line 193 def bpp spc = SAMPLES_PER_COLOR[@color] spc ? spc * depth : nil end |
#color_used? ⇒ Boolean
198 199 200 |
# File 'lib/zpng/chunk.rb', line 198 def color_used? (@color & COLOR_USED) != 0 end |
#export_data ⇒ Object
188 189 190 |
# File 'lib/zpng/chunk.rb', line 188 def export_data [@width, @height, @depth, @color, @compression, @filter, @interlace].pack(FORMAT) end |
#grayscale? ⇒ Boolean
202 203 204 |
# File 'lib/zpng/chunk.rb', line 202 def grayscale? !color_used? end |
#inspect(verbosity = 10) ⇒ Object
214 215 216 217 218 219 220 |
# File 'lib/zpng/chunk.rb', line 214 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
206 207 208 |
# File 'lib/zpng/chunk.rb', line 206 def palette_used? (@color & PALETTE_USED) != 0 end |