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

  • Post author:
  • Post category:java




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

之前用c语言实现过纯色BMP文件。

现在是由java语言实现该功能,主要在ubuntu下的java环境中编译并执行完成该功能。



1、java语言简介

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2] 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。



2、代码实现

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

public class testbmp {

	// change byte
	public static byte[] changeByte(int data){
		byte b4 = (byte)((data)>>24);
		byte b3 = (byte)(((data)<<8)>>24);
		byte b2 = (byte)(((data)<<16)>>24);
		byte b1 = (byte)(((data)<<24)>>24);
		byte[] bytes = {b1,b2,b3,b4};
		return bytes;
	}

	// main
    public static void main(String []args) {

		int width 	= 1920;
		int height 	= 1080;
		int red 	= 255;
		int green 	= 255;
		int blue 	= 0;
		
       	System.out.println("write bmp before");

		try {
			//  create output file object
			java.io.FileOutputStream fos = new java.io.FileOutputStream("test-java.bmp");
			
			//  create output data object
			java.io.DataOutputStream dos = new java.io.DataOutputStream(fos);

			// bmp header
			int bfType = 0x424d; // BM
			int bfSize = 54 + width * height * 3;// size
			int bfReserved1 = 0;// reserved1
			int bfReserved2 = 0;// reserved2
			int bfOffBits = 54;// offbits

			// write bmp header
			dos.writeShort(bfType); // 'BM'
			dos.write(changeByte(bfSize),0,4); // size
			dos.write(changeByte(bfReserved1),0,2);// 
			dos.write(changeByte(bfReserved2),0,2);// 
			dos.write(changeByte(bfOffBits),0,4);// 

			//  info header
			int biSize = 40;// size
			int biWidth = width;// 
			int biHeight = height;// 
			int biPlanes = 1; // must be 1
			int biBitcount = 24;// 3bit*8
			int biCompression = 0;// 
			int biSizeImage = width * height;// size
			int biXPelsPerMeter = 0;// 
			int biYPelsPerMeter = 0;// 
			int biClrUsed = 0;// 
			int biClrImportant = 0;// 
			
			// write info header
			dos.write(changeByte(biSize),0,4);// 
			dos.write(changeByte(biWidth),0,4);// 
			dos.write(changeByte(biHeight),0,4);// 
			dos.write(changeByte(biPlanes),0,2);// 
			dos.write(changeByte(biBitcount),0,2);//
			dos.write(changeByte(biCompression),0,4);// 
			dos.write(changeByte(biSizeImage),0,4);// 
			dos.write(changeByte(biXPelsPerMeter),0,4);// 
			dos.write(changeByte(biYPelsPerMeter),0,4);// 
			dos.write(changeByte(biClrUsed),0,4);// 
			dos.write(changeByte(biClrImportant),0,4);// 

			// RGB
			byte[] red1 	= changeByte(red);
			byte[] green1 	= changeByte(green);
			byte[] blue1 	= changeByte(blue);

			// write RGB data
			for (int i = height - 1; i >= 0; i--) {
				for (int j = 0; j < width; j++) {
					dos.write(blue1,0,1);
					dos.write(green1,0,1);
					dos.write(red1,0,1);
				}
			}
			
			// close
			dos.flush();
			dos.close();
			fos.close();
			
			System.out.println("success!!!");

	       	System.out.println("wirte bmp out");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}






3、编译程序

javac testbmp.java

执行完上述命令之后,会生成testbmp.class文件,后面执行程序时需要该文件。

在这里插入图片描述



4、执行程序

java testbmp

执行上述命令,由于需要写入大量数据,所以耗时较长。

在这里插入图片描述

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

需要修改分辨率和颜色的话,可以修改宽高和红绿蓝参数即可

		int width 	= 1920;
		int height 	= 1080;
		int red 	= 255;
		int green 	= 255;
		int blue 	= 0;



5、参考资料

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

https://blog.csdn.net/weixin_28813803/article/details/114621184



版权声明:本文为jack8126原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。