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