图像处理基本方法-lua语言生成纯色BMP文件

图像处理基本方法-lua语言生成纯色BMP文件

之前使用过c、java、python、go、R语言实现过生成纯色BMP图片的功能。

现在由lua语言完成该功能。其他的一些背景和环境就不在赘述,主要还是在ubuntu下使用lua语言环境完成。

1、lua语言简介

Lua是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

2、实现代码

--/*******************************************************
-- * file:testbmp.lua
-- * date:2021-05-11
-- * version:1.0.0.1
-- * author:jack8126
-- * description: create bmp file
-- *******************************************************/

width = 1920;
height = 1080;
bit = 3;
Red = 255;
Green = 255;
Blue = 0;

bfType = 'BM'
bfSize = (width*height*bit + 54);
bfReserved1 = 0;
bfReserved2 = 0;
bfOffBits = 54;

biSize = 40
biWidth = width;
biHeight = height;
biPlanes = 1;
biBitCount = bit * 8;
biCompression = 0
biSizeImage = 0;
biXPelsPerMeter = 3780;
biYPelsPerMeter = 3780;
biClrUsed = 0;
biClrImportant = 0;

bmpDataSize = bfSize - 54;


function hex2str(hex)
	--判断输入类型
	if (type(hex)~="string") then
		return nil,"hex2str invalid input type"
	end
	--拼接字符串
	local index=1
	local ret=""
	for index=1,hex:len() do
		--ret=ret..string.format("%02X",hex:sub(index):byte())
    ret=ret..string.format("%02X",hex:sub(index))
	end
 
	return ret
end

function intTobytes(count,x)
  local b4 = 0;
  local b3 = 0;
  local b2 = 0;
  local b1 = 0;
  
  if count == 4 then  
    b4=x%256  x=(x-x%256)/256
    b3=x%256  x=(x-x%256)/256
    b2=x%256  x=(x-x%256)/256
    b1=x%256  x=(x-x%256)/256 
    return string.char(b4,b3,b2,b1)
  elseif count == 2 then
    b2=x%256  x=(x-x%256)/256
    b1=x%256  x=(x-x%256)/256
    return string.char(b2,b1)  
  elseif count == 1 then
    b1=x%256  x=(x-x%256)/256
    return string.char(b1)
  end

end


function main()
  print("main in");
  -- 以读写方式打开文件
  file = io.open("test-lua.bmp", "w")

  -- 设置默认输出文件为 test.lua
  io.output(file)

  -- 在文件最后一行添加 Lua 注释
  io.write(bfType)
  
  print("bfSize=", string.format("%04x", bfSize));
  --io.write((bfSize));
  --io.write(string.format("%04x", bfSize))

  io.write(intTobytes(4,bfSize))
  
  io.write(intTobytes(2,bfReserved1));
  io.write(intTobytes(2,bfReserved2));
  io.write(intTobytes(4,bfOffBits));
  
  
  
  --reconstruct bmp header
  io.write(intTobytes(4,biSize))
  io.write(intTobytes(4,biWidth))
  io.write(intTobytes(4,biHeight))
  io.write(intTobytes(2,biPlanes))
  io.write(intTobytes(2,biBitCount))
  io.write(intTobytes(4,biCompression))
  io.write(intTobytes(4,biSizeImage))
  io.write(intTobytes(4,biXPelsPerMeter))
  io.write(intTobytes(4,biYPelsPerMeter))
  io.write(intTobytes(4,biClrUsed))
  io.write(intTobytes(4,biClrImportant))



  -- reconstruct pixels
  for x=1,height, 1 do
    for y=1,width, 1 do
        io.write(intTobytes(1,Blue))
        io.write(intTobytes(1,Green))
        io.write(intTobytes(1,Red))
    end
  end
  

  -- 关闭打开的文件
  --file:close()
  io.close(file)
  print("main out");
end

main();

3、执行程序

lua testbmp.lua

执行上面命令之后,会产生bmp文件。

在这里插入图片描述

如要修改分辨率和色彩信息,修改程序中的值即可

width = 1920;
height = 1080;
bit = 3;
Red = 255;
Green = 255;
Blue = 0;

4、参考资料

https://blog.csdn.net/sinolzeng/article/details/40541797

序中的值即可

width = 1920;
height = 1080;
bit = 3;
Red = 255;
Green = 255;
Blue = 0;

4、参考资料

https://blog.csdn.net/sinolzeng/article/details/40541797

https://blog.csdn.net/jack8126/article/details/116331956

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值