Module: ChunkyPNG::Canvas::StreamImporting
- Included in:
- ChunkyPNG::Canvas
- Defined in:
- lib/chunky_png/canvas/stream_importing.rb
Overview
Methods to quickly load a canvas from a stream, encoded in RGB, RGBA, BGR or ABGR format.
Instance Method Summary collapse
-
#from_abgr_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an ARGB formatted stream with a provided with and height.
-
#from_bgr_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an BGR formatted stream with a provided with and height.
-
#from_rgb_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an RGB formatted stream with a provided with and height.
-
#from_rgba_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an RGBA formatted stream with a provided with and height.
Instance Method Details
#from_abgr_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an ARGB formatted stream with a provided with and height.
Every pixel should be represented by 4 bytes in the stream, in the correct ARGB order. This format is almost like the internal representation of a canvas object, so this kind of stream can be read extremely quickly.
71 72 73 74 |
# File 'lib/chunky_png/canvas/stream_importing.rb', line 71 def from_abgr_stream(width, height, stream) string = stream.respond_to?(:read) ? stream.read(4 * width * height) : stream.to_s[0, 4 * width * height] new(width, height, string.unpack("V*")) end |
#from_bgr_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an BGR formatted stream with a provided with and height.
Every pixel should be represented by 3 bytes in the stream, in the correct BGR order. This format closely resembles the internal representation of a canvas object, so this kind of stream can be read extremely quickly.
53 54 55 56 57 58 |
# File 'lib/chunky_png/canvas/stream_importing.rb', line 53 def from_bgr_stream(width, height, stream) string = ChunkyPNG::EXTRA_BYTE.dup # Add a first byte to the first BGR triple. string << (stream.respond_to?(:read) ? stream.read(3 * width * height) : stream.to_s[0, 3 * width * height]) pixels = string.unpack("@1#{"XV" * (width * height)}").map { |color| color | 0x000000ff } new(width, height, pixels) end |
#from_rgb_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an RGB formatted stream with a provided with and height.
Every pixel should be represented by 3 bytes in the stream, in the correct RGB order. This format closely resembles the internal representation of a canvas object, so this kind of stream can be read extremely quickly.
18 19 20 21 22 23 24 |
# File 'lib/chunky_png/canvas/stream_importing.rb', line 18 def from_rgb_stream(width, height, stream) string = stream.respond_to?(:read) ? stream.read(3 * width * height) : stream.to_s[0, 3 * width * height] string << ChunkyPNG::EXTRA_BYTE # Add a fourth byte to the last RGB triple. unpacker = "NX" * (width * height) pixels = string.unpack(unpacker).map { |color| color | 0x000000ff } new(width, height, pixels) end |
#from_rgba_stream(width, height, stream) ⇒ ChunkyPNG::Canvas
Creates a canvas by reading pixels from an RGBA formatted stream with a provided with and height.
Every pixel should be represented by 4 bytes in the stream, in the correct RGBA order. This format is exactly like the internal representation of a canvas object, so this kind of stream can be read extremely quickly.
37 38 39 40 |
# File 'lib/chunky_png/canvas/stream_importing.rb', line 37 def from_rgba_stream(width, height, stream) string = stream.respond_to?(:read) ? stream.read(4 * width * height) : stream.to_s[0, 4 * width * height] new(width, height, string.unpack("N*")) end |