#!/usr/bin/env ruby def rgb565 r, g, b r >>= 3 # shift to skip unused bits g >>= 2 b >>= 3 [ (r<<6) | g | (b<<11) ].pack('n') # build & pack to 16 bits end samples = [ rgb565(255,0,0), rgb565(0,255,0), rgb565(0,0,255), rgb565(50,0,0), rgb565(0,50,0), rgb565(0,0,50), rgb565(0,255,255), rgb565(255,255,0) ] File.open("/dev/fb0", "w") do |fp| # open framebuffer for write 480.times do |sl| # for every scanline: fp.seek sl*4096 # update framebuffer pointer samples.each do |color| # eight color samples: 100.times { fp.write color } # 100 pixels wide column end end end