图像处理基本方法-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 版权协议,转载请附上原文出处链接和本声明。