Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Bmp
- def Bmp.save(name, width, height, pixels)
- file = File.open(name,"w")
- bmp_header_size = 14
- dib_header_size = 108
- # BMP header
- file.write("BM")
- pixel_array_size = width * height * 4
- file_size = bmp_header_size + dib_header_size + pixel_array_size
- pixel_array_offset = bmp_header_size + dib_header_size
- bmpHeader = [file_size, 0,0, 0,0, pixel_array_offset]
- file.write(bmpHeader.pack("LCCCCL"))
- # DIB header
- color_planes = 1
- bits_per_pixel = 32
- bi_bitfields = 3
- resolution = 2835
- palette_color_count = 0
- important_color_count = 0
- r = 0x00ff0000
- g = 0x0000ff00
- b = 0x000000ff
- a = 0xff000000
- dibHeader = [
- dib_header_size,
- width,height,color_planes,bits_per_pixel,bi_bitfields,
- pixel_array_size,
- resolution,resolution,
- palette_color_count, important_color_count,
- r,g,b,a]
- file.write(dibHeader.pack("LLLSSLLLLLLLLLL"))
- file.write(" niW")
- file.write("\000"*0x24)
- file.write([0,0,0].pack("LLL"))
- # Pixels
- file.write(pixels.pack("L*"))
- file.close()
- end
- end
- module Color
- Black = 0xff000000
- White = 0xffffffff
- Transparent = 0x00000000
- Red = 0xffff0000
- Green = 0xff00ff00
- Blue = 0xff0000ff
- end
- class Canvas
- def initialize(width,height)
- @width = width
- @height = height
- @pixels = Array.new(width*height,Color::Transparent)
- end
- def set_pixel(x,y,color)
- @pixels[x + y*@width] = color
- end
- def save_bmp(name)
- Bmp.save(name,@width,@height,@pixels)
- end
- end
- canvas = Canvas.new(10,10)
- canvas.set_pixel(4,5,Color::Red)
- canvas.set_pixel(1,1,Color::White)
- canvas.save_bmp("y.bmp")
- #save_bmp("x.bmp",3,2,[red,red,red,red,red,red])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement