Skip to content

Instantly share code, notes, and snippets.

@jorgenpt
Created January 18, 2012 01:54
Show Gist options
  • Save jorgenpt/1630303 to your computer and use it in GitHub Desktop.
Save jorgenpt/1630303 to your computer and use it in GitHub Desktop.
Ruby function to convert 565 & 555 format data into a Magick::Image
require 'rmagick'
def create_magick_image(input, width, height, bpp)
mode = 'RGB'
case bpp
when 15
data = input.unpack('v*').collect do |rgb|
rgb = rgb & 0x7fff
red = (rgb >> 10) / 31.0
green = ((rgb >> 5) & 31) / 31.0
blue = (rgb & 31) / 31.0
[red, green, blue]
end
data = data.flatten
when 16
data = input.unpack('v*').collect do |rgb|
red = (rgb >> 11) / 31.0
green = ((rgb >> 5) & 63) / 63.0
blue = (rgb & 31) / 31.0
[red, green, blue]
end
data = data.flatten
when 32
mode = 'ARGB'
data = input.unpack('C*').collect { |p| p / 255.0 }
else
raise ArgumentError, "Unsupported bpp: #{bpp}"
end
Magick::Image.constitute(width, height, mode, data)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment