存在很大很大的问题,1.读取后画在面板上的速度太慢;2.有些24位的bmp没发读出来。
先直接贴代码,问题再日后解决。
package com.ct.t20160103; import java.awt.Color; import java.awt.Graphics; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import javax.swing.JFrame; /** * @author Chalmers * @version 创建时间:2016年1月3日 下午2:00:20 */ public class BMPTest extends JFrame { int image_width = 0; int image_height = 0; int imageR[][] = null; int imageG[][] = null; int imageB[][] = null; public BMPTest() { try { init(); } catch (Exception e) { e.printStackTrace(); } this.setBounds(0, 0, image_width, image_height); this.setVisible(true); setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // repaint(); } //获得画图所需要的数据 public void init() throws Exception { // 获得图片数据 BufferedInputStream bis = new BufferedInputStream(new FileInputStream( "F://a.bmp")); // DataInputStream bis = new DataInputStream(new FileInputStream( // "F://a.bmp")); // 跳过前面14个字节 int len = 14; byte[] b = new byte[len]; bis.read(b); // 读取40个字节 len = 40; b = new byte[len]; bis.read(b); image_width = ChangeInt(b, 7); // 源图宽度 image_height = ChangeInt(b, 11); // 源图高度 showBMPData(bis); } // 将4个byte类型数据转换成1个int类型 public int ChangeInt(byte[] bi, int start) { return (((int) bi[start] & 0xff) << 24) | (((int) bi[start - 1] & 0xff) << 16) | (((int) bi[start - 2] & 0xff) << 8) | (int) bi[start - 3] & 0xff; } //获得图片中每一个像素点的数据 //每一个像素点又三个byte类型数据组成,分别读取出来 public void showBMPData(BufferedInputStream bis) throws IOException { //图片有多大,则构造多大的数组 imageR = new int[image_width][image_height]; imageG = new int[image_width][image_height]; imageB = new int[image_width][image_height]; //判断图片数据最后是否补0 int skip_width = 0; if (!(image_width * 3 % 4 == 0)) { skip_width = 4 - image_width * 3 % 4; } //读取图片的每一个像素中的颜色的数据 for (int h = image_height - 1; h >= 0; h--) { //要按顺序读取 for (int w = 0; w < image_width; w++) { int b = bis.read(); int g = bis.read(); int r = bis.read(); //将数据存放进数组 imageR[h][w] = r; imageG[h][w] = g; imageB[h][w] = b; if (w == 0) { bis.skip(skip_width); } } } } @Override public void paint(Graphics g) { //在画图这个地方是很有问题,它是一个像素点一个像素点的画,导致速度很慢 //待修改 for (int i = 0; i < image_width; i++) { for (int j = 0; j < image_height; j++) { g.setColor(new Color(imageR[i][j], imageG[i][j], imageB[i][j])); g.fillOval(j, i, 1, 1); } } } public static void main(String[] args) throws Exception { new BMPTest(); } }
相关推荐
c++读取bmp格式图片
通过读取bmp格式文件的数据格式,用数组合理的读取后,重新画出该图片
压缩包内包含报告及说明文档。源码环境是VC6,在VS内稍做修改之后也可运行。代码是我大一时所写,可能有部分不妥之处,欢迎指正。由于是比赛作品直接压缩上传,压缩包内包含作者信息、还望尊重作者,不喜勿喷,谢谢...
MFC实现框架读取BMP文件。单功能的。在openducument中重写函数。读取BMP文件数据的方式显示bmp
24位BMP图片转565格式16位数组C文件代码,生成的代码用于嵌入式程序代码中图片文件显示,BMP图片以数组的形式保存并读取。代码可以用TC或VC编译使用
一、BMP文件分析 1. 什么是BMP(位图)? 常见的图像文件格式有:BMP、JPG...BMP格式的图片,没有使用任何压缩算法,这种方式在以前使用的比较多,现在用的就比较少了,不过为了学习图像处理算法,所以先以该种格式的文
这是一个用vc++做的读取bmp格式的软件,图像处理包括反色和扫描,以及植株成行。
就是用c语言读取一副bmp图像文件的信息头信息
读取bmp格式图片,输出图片的RGB值存在txt文件中。
一个实现bmp格式图片转换为raw纯数据格式的C++程序,经调试通过,使用时修改程序中H、W为自己图片的高和宽即可。
BMP格式图片信息读取及保存:宽、高、每像素所占位数、灰度图像的颜色表、位图RGB数据等
测试环境:xcode13.3 MacPro13-inch2020 M1 OpenGL版本:OpenGL 4.5 ...测试图片格式:bmp 建议: 1.先完成xcode配置OpenGL工程环境,网上有教程。 2.本程序支持读取任意分辨率的bmp图片,并显示。
Java语言读取所有色bmp图片格式,包括1bit 4bit 8bit 24bit,都在BmpUtil这个Java工具类中!
只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB...
vs2013 BMP图像文件的读取 获取bmp图像文件的头文件格式以及每点的像素值,并且实现了图像的旋转,保存图像
24位BMP图片转565格式16位数组C文件代码,生成的代码用于嵌入式程序代码中图片文件显示,BMP图片以数组的形式保存并读取
bmp图片读取
用于读取BMP格式图片文件信息,以及将新的图像信息写入BMP文件
利用 C 语言只需两步实现 RAW 格式图片转换成 BMP 格式图片,简单实用容易理解,附代码注释。
一个很简单的测试程序,在QT中使用SDL2显示bmp图片,程序简单易懂,作为参考