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

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

现在由perl语言完成该功能。主要是在ubuntu下使用perl语言环境完成。

1、perl语言简介

Perl一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web开发,网络编程,GUI开发等。 [1]
Perl易于使用、高效、完整,而不是美观(小巧,优雅,简约)。同时支持过程和面向对象编程,对文本处理具有强大的内置支持,并且拥有第三方模块集合之一。 [1] Perl借取了C、sed、awk、shell脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。

2、实现代码

#!/usr/bin/perl
	

	$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;


	sub intToArray{
		$tmp1 = 0;
		$tmp2 = 0;
		$tmp3 = 0;
		$tmp4 = 0;
		#print("$_[0], $_[1]\n");
		if ($_[1] == 1){
			$tmp1 = chr($_[0]);
			return ($tmp1);
		}
		if($_[1] == 2){
			$tmp1 = chr($_[0] & 0xFF);
			$tmp2 = chr( ($_[0] >> 8) & 0xFF );
			return ($tmp1,$tmp2);
		}
		if($_[1] == 4){
			$tmp1 = chr($_[0] & 0xFF);
			$tmp2 = chr( ($_[0] >> 8) & 0xFF );
			$tmp3 = chr( ($_[0] >> 16) & 0xFF);
			$tmp4 = chr( ($_[0] >> 24) & 0xFF);
			#print("$tmp1, $tmp2, $tmp3, $tmp4 \n");
			@hits = ($tmp1, $tmp2, $tmp3, $tmp4);  
			return @hits;
		}
	}

	print "write file \n";

	open(file1, ">test-perl.bmp") or die $!;
	#print file1 "BM";#ÏòÎļþдÈëÄÚÈÝ

	$bfSizeHex = sprintf("%x", $bfSize);

	#print "$bfSizeHex \n";

	
	syswrite file1,$bfType,2;


	@arraySize = intToArray($bfSize, 4);
	#print "\$arraySize[0] = $arraySize[0] \n";
	#print "\$arraySize[1] = $arraySize[1] \n";
	#print "\$arraySize[2] = $arraySize[2] \n";
	#print "\$arraySize[3] = $arraySize[3] \n";
	syswrite file1,$arraySize[0],1;
	syswrite file1,$arraySize[1],1;
	syswrite file1,$arraySize[2],1;
	syswrite file1,$arraySize[3],1;

	#syswrite file1,@arraySize,1; # error


	@arrayTmp = intToArray($bfReserved1, 2);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	
	@arrayTmp = intToArray($bfReserved2, 2);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;


	
	@arrayTmp = intToArray($bfOffBits, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;


	@arrayTmp = intToArray($biSize, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;


	@arrayTmp = intToArray($biWidth, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;

	@arrayTmp = intToArray($biHeight, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;


	@arrayTmp = intToArray($biPlanes, 2);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	
	@arrayTmp = intToArray($biBitCount, 2);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;

	@arrayTmp = intToArray($biCompression, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;


	@arrayTmp = intToArray($biSizeImage, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;


	@arrayTmp = intToArray($biXPelsPerMeter, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;

	@arrayTmp = intToArray($biYPelsPerMeter, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;

	@arrayTmp = intToArray($biClrUsed, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;


	@arrayTmp = intToArray($biClrImportant, 4);
	syswrite file1,$arrayTmp[0],1;
	syswrite file1,$arrayTmp[1],1;
	syswrite file1,$arrayTmp[2],1;
	syswrite file1,$arrayTmp[3],1;

	print "write bmp file before \n";
	# $width
	for( $a = 0; $a < $height; $a = $a + 1 ){
		for( $b = 0; $b < $width; $b = $b + 1){
			syswrite file1,chr($Blue),1; 
			syswrite file1,chr($Green),1; 
			syswrite file1,chr($Red),1;
			
		}
	}
	print "write bmp file out \n";	
	close(file1);


3、执行程序

命令如下:

perl testbmp.pl 

执行完成之后,可以生成bmp文件。

在这里插入图片描述

4、参考资料

https://bbs.csdn.net/topics/30096685

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值