Advertisement
Guest User

bmp24.lua

a guest
Mar 21st, 2021
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.45 KB | None | 0 0
  1. local shell = require("shell")
  2. local filesystem = require("filesystem")
  3. local internet = require("internet")
  4. local component = require("component")
  5. local term = require("term")
  6. local gpu = component.gpu
  7.  
  8. local args, ops = shell.parse(...)
  9.  
  10.  
  11. function rgbToHex(rgb)
  12.   local hexadecimal = '0X'
  13.   for key, value in pairs(rgb) do
  14.     local hex = ''
  15.     while(value > 0)do
  16.       local index = math.fmod(value, 16) + 1
  17.       value = math.floor(value / 16)
  18.       hex = string.sub('0123456789ABCDEF', index, index) .. hex    
  19.     end
  20.     if(string.len(hex) == 0)then
  21.       hex = '00'
  22.     elseif(string.len(hex) == 1)then
  23.       hex = '0' .. hex
  24.     end
  25.     hexadecimal = hexadecimal .. hex
  26.   end
  27.   return hexadecimal
  28. end
  29.  
  30. local res = filesystem.size(ops["path"])
  31.  
  32. local img = io.open(ops["path"], "rb")
  33. if(img==nil) then
  34.   error("no such file found")
  35. end
  36. --тут читаются 2 байта, так как первые 2 байта у .bmp должны быть равны BM
  37. local isBmp = img:read(2)
  38. if isBmp ~= "BM" then error("input file is not .bmp") end
  39. --тут читаются байты в промежутке с 19 по 23 байт, где находится информация о ширине изображения
  40. img:read(16)
  41. local w = string.unpack(">B", img:read(1))
  42. --а тут читаются байты в промежутке с 24 по 27 байт, где находится информация о высоте изображения
  43. img:read(3)
  44. local h = string.unpack(">B", img:read(1))
  45. --а тут читаются оставшиеся 31 байт, так как с 1 до 54 байта включительно находится заголовок .bmp
  46. img:read(31)
  47. local byte_to_int = nil
  48. local extrabytes=((res-54)-w*h*3)/h --не спрашивайте зачем, так надо
  49. local rgb_t = {}
  50. local px_t = {}
  51. local r = nil
  52. local b = nil
  53. term.clear()
  54. for i=1, res-54-extrabytes*h do
  55.   byte_to_int=string.unpack(">B", img:read(1))
  56.   table.insert(rgb_t, byte_to_int)
  57.   if(i%(w*3)==0) then
  58.     img:read(extrabytes)
  59.   end
  60.   if(#rgb_t==3) then
  61.     r = rgb_t[1]
  62.     b = rgb_t[3]
  63.     rgb_t[1]=b
  64.     rgb_t[3]=r
  65.     gpu.setForeground(tonumber(rgbToHex(rgb_t)))
  66.     table.insert(px_t, 1, rgb_t)
  67.     rgb_t={}
  68.   end
  69. end
  70. local l = 1
  71. local pc_w, pc_h = gpu.getResolution()
  72. gpu.fill(1, 1, pc_w, pc_h, " ")
  73. for k=2, h+1 do
  74.   for j=1, w do
  75.     gpu.setBackground(tonumber(rgbToHex(px_t[l])))
  76.     gpu.setForeground(tonumber(rgbToHex(px_t[l])))
  77.     gpu.set(j, k, "X")
  78.     l=l+1
  79.   end
  80. end
  81.  
  82. img:close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement