读取BMP格式图片

昨天华信终于开课了,左哥给我们温习了以前的知识点,让我们重新写一个画图板、五子棋出来,我昨天大概完成了画图板的几个功能,查漏补缺。

今天左哥给我们讲了BMP格式图片的读取方法,还有字节型数据转化为整形数据的操作方法。思想大致是读取图片的高度和宽度以及大小,然后再逐个用IO流读取像素点。在窗口上重绘就可以了。

我今天给画图板添加了读取BMP格式的功能,代码如下:

public void openBMP() throws Exception {

		JFileChooser jic = new JFileChooser();
		jic.showOpenDialog(null);
		File file = jic.getSelectedFile();
		FileInputStream fis = new FileInputStream(file);
		byte[] bytes = new byte[54];
		fis.read(bytes);
		int width = byteToInt(bytes[21], bytes[20], bytes[19], bytes[18]);
		int height = byteToInt(bytes[25], bytes[24], bytes[23], bytes[22]);
		blue = new int[height][width];
		green = new int[height][width];
		red = new int[height][width];
		int zero = 0;
		if (width * 3 % 4 != 0) {
			zero = 4 - width % 4;
		}
		for (int i = height - 1; i >= 0; i--) {
			for (int j = 0; j < width; j++) {
				blue[i][j] = fis.read();
				green[i][j] = fis.read();
				red[i][j] = fis.read();
			}
			fis.skip(zero);
		}
		fis.close();
		if (red != null) {
			JFrame jf = new JFrame("BMP图片") {
				public void paint(Graphics g) {
					super.paint(g);
					for (int i = 0; i < red.length; i++) {
						for (int j = 0; j < red[i].length; j++) {
							Color color = new Color(red[i][j], green[i][j], blue[i][j]);
							g.setColor(color);
							g.drawLine(j, i, j, i);
						}
					}
				}
			};
			jf.setSize(width, height);
			jf.setDefaultCloseOperation(1);
			jf.setVisible(true);
		}
	}
还有字节型转化为整形的方法:

public int byteToInt(byte byte1, byte byte2, byte byte3, byte byte4) {
		int a = ((int) byte1 & 0xff) << 24;
		int b = ((int) byte2 & 0xff) << 16;
		int c = ((int) byte3 & 0xff) << 8;
		int d = (int) byte4 & 0xff;
		return a | b | c | d;
	}


你可能感兴趣的:(读取BMP格式图片)