Advertisement
ptrelford

Save BMP in Ruby

Jan 8th, 2016
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.75 KB | None | 0 0
  1. module Bmp
  2.   def Bmp.save(name, width, height, pixels)
  3.     file = File.open(name,"w")
  4.     bmp_header_size = 14
  5.     dib_header_size = 108
  6.     # BMP header
  7.     file.write("BM")
  8.     pixel_array_size = width * height * 4
  9.     file_size = bmp_header_size + dib_header_size + pixel_array_size
  10.     pixel_array_offset = bmp_header_size + dib_header_size
  11.     bmpHeader = [file_size, 0,0, 0,0, pixel_array_offset]
  12.     file.write(bmpHeader.pack("LCCCCL"))
  13.     # DIB header
  14.     color_planes = 1
  15.     bits_per_pixel = 32
  16.     bi_bitfields = 3
  17.     resolution = 2835
  18.     palette_color_count = 0
  19.     important_color_count = 0
  20.     r = 0x00ff0000
  21.     g = 0x0000ff00
  22.     b = 0x000000ff
  23.     a = 0xff000000
  24.     dibHeader = [
  25.        dib_header_size,
  26.        width,height,color_planes,bits_per_pixel,bi_bitfields,
  27.        pixel_array_size,
  28.        resolution,resolution,
  29.        palette_color_count, important_color_count,
  30.        r,g,b,a]
  31.     file.write(dibHeader.pack("LLLSSLLLLLLLLLL"))
  32.     file.write(" niW")
  33.     file.write("\000"*0x24)
  34.     file.write([0,0,0].pack("LLL"))
  35.     # Pixels
  36.     file.write(pixels.pack("L*"))
  37.     file.close()
  38.   end
  39. end
  40. module Color
  41.   Black = 0xff000000
  42.   White = 0xffffffff
  43.   Transparent = 0x00000000
  44.   Red = 0xffff0000
  45.   Green = 0xff00ff00
  46.   Blue = 0xff0000ff
  47. end
  48. class Canvas
  49.   def initialize(width,height)
  50.     @width = width
  51.     @height = height
  52.     @pixels = Array.new(width*height,Color::Transparent)
  53.   end
  54.   def set_pixel(x,y,color)
  55.     @pixels[x + y*@width] = color
  56.   end
  57.   def save_bmp(name)
  58.       Bmp.save(name,@width,@height,@pixels)
  59.   end
  60. end
  61. canvas = Canvas.new(10,10)
  62. canvas.set_pixel(4,5,Color::Red)
  63. canvas.set_pixel(1,1,Color::White)
  64. canvas.save_bmp("y.bmp")
  65. #save_bmp("x.bmp",3,2,[red,red,red,red,red,red])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement