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

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

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

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

1、ruby语言简介

Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。

2、代码实现

# !/usr/bin/rub 


bitMapFileHeader = Array.new(14)

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;


def intToArray(inputData, count)
	a1 = 0;
	a2 = 0;
	a3 = 0;
	a4 = 0;
	if count == 1 then
		a1 = inputData & 0xff;
		arrays = Array.[](a1)
		return arrays;
	elsif count == 2 then
		a1 = inputData & 0xff;
		a2 = (inputData >> 8) & 0xff;
		arrays = Array.[](a1, a2)
		return arrays;
	elsif count == 4 then
		a1 = inputData & 0xff;
		a2 = (inputData >> 8) & 0xff;
		a3 = (inputData >> 16) & 0xff;
		a4 = (inputData >> 24) & 0xff;

		#puts inputData,a1,a2,a3,a4;

		arrays = Array.[](a1, a2, a3, a4)
		return arrays;
	end

	return -1;
end
 
aFile = File.new("test-rb.bmp", "wb")

if aFile
	puts "Open file success!"
	puts bfType;
	
	#aFile.syswrite(bfType)
	#aFile.syswrite(bfSize)
	#aFile.syswrite(bfSize.to_s)
	#aFile.syswrite(String(bfSize))	#aFile.syswrite(bfSize.to_s(16))
	#aFile.syswrite(bfSize.to_s(16).unpack("h*"))
	#aFile.syswrite(bfSize.pack("CCC"))

	#tmp = String(bfSize.to_s(16))
	#puts tmp;

	bytes = [];
	bytes = 255;
	
	#tmp = bytes.map{|b| b.to_i(16)};
	#puts tmp;


	#aFile.syswrite(255.to_s(16)) # ff
	#aFile.syswrite(255.to_s(16).chr) # f
	#aFile.syswrite(0xff) # 255
	#aFile.syswrite(0xff.to_s) # 255
	#aFile.syswrite(0xff.to_s(16)) # ff
	#aFile.syswrite(0xff.to_s(16).ord) # 102

	#aFile.syswrite(255.to_s(16).pack('a2'))
	
	#aFile.syswrite( String(bfSize.to_s(16)) )
	
	
	bitMapFileHeader[0] = 1;#bfType;
	bitMapFileHeader[1] = 2;#bfSize;
	bitMapFileHeader[4] = 3;#bfOffBits;
	#aFile.syswrite(bitMapFileHeader.pack('a2LS2L'))

	
	#nums = Array.[](0x42, 0x4d, 0x36, 0xEC, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00)
	#aFile.syswrite(nums.pack('c14')) # 255

	aFile.syswrite(bfType)

	#nums = intToArray(bfSize, 4);
	#puts nums;
	
	#nums = Array.[](0x36, 0xEC, 0x5E, 0x00);
	#aFile.syswrite(nums.pack('c4'))
	aFile.syswrite(intToArray(bfSize, 4).pack('c4'))
	aFile.syswrite(intToArray(bfReserved1, 2).pack('c2'))
	aFile.syswrite(intToArray(bfReserved2, 2).pack('c2'))
	aFile.syswrite(intToArray(bfOffBits, 4).pack('c4'))

	
	#nums = Array.[]( 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00)
	#aFile.syswrite(nums.pack('c8')) # 255

	#nums = Array.[](0x28, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4,0x0e,0x00,0x00,0xc4,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
	#aFile.syswrite(nums.pack('c40')) # 255

	aFile.syswrite(intToArray(biSize, 			4).pack('c4'))
	aFile.syswrite(intToArray(biWidth, 			4).pack('c4'))
	aFile.syswrite(intToArray(biHeight, 		4).pack('c4'))
	aFile.syswrite(intToArray(biPlanes, 		2).pack('c2'))
	aFile.syswrite(intToArray(biBitCount, 		2).pack('c2'))

	aFile.syswrite(intToArray(biCompression,	4).pack('c4'))
	aFile.syswrite(intToArray(biSizeImage, 		4).pack('c4'))
	aFile.syswrite(intToArray(biXPelsPerMeter, 	4).pack('c4'))
	aFile.syswrite(intToArray(biYPelsPerMeter, 	4).pack('c4'))
	aFile.syswrite(intToArray(biClrUsed, 		4).pack('c4'))
	aFile.syswrite(intToArray(biClrImportant, 	4).pack('c4'))

	
	puts "write bmp file before"
	nums = Array.[](Blue, Green, Red);
	
	for i in 0 .. height - 1
		for j in 0 .. width - 1
			aFile.syswrite(nums.pack('c3')) # 255
		end
	end
	puts "write bmp file out"
	
	aFile.close	
else
  	puts "Unable to open file!"
end



3、执行程序

命令如下:

ruby testbmp.rb 

执行命令后会出现bmp文件,表示使用ruby语言生成了纯色bmp文件。

在这里插入图片描述

4、参考资料

https://blog.csdn.net/slowsnowscar/article/details/78247748

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值