`
MoonMonster
  • 浏览: 35813 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

BMP24位格式图片读取

    博客分类:
  • Java
阅读更多

存在很大很大的问题,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格式图片

    c++读取bmp格式图片

    用java读取bmp格式图片文件

    通过读取bmp格式文件的数据格式,用数组合理的读取后,重新画出该图片

    C语言读取BMP图片

    压缩包内包含报告及说明文档。源码环境是VC6,在VS内稍做修改之后也可运行。代码是我大一时所写,可能有部分不妥之处,欢迎指正。由于是比赛作品直接压缩上传,压缩包内包含作者信息、还望尊重作者,不喜勿喷,谢谢...

    MFC 读取BMP格式图片

    MFC实现框架读取BMP文件。单功能的。在openducument中重写函数。读取BMP文件数据的方式显示bmp

    24位BMP图片转565格式16位数组C文件代码

    24位BMP图片转565格式16位数组C文件代码,生成的代码用于嵌入式程序代码中图片文件显示,BMP图片以数组的形式保存并读取。代码可以用TC或VC编译使用

    BMP文件分析及用python读取

    一、BMP文件分析 1. 什么是BMP(位图)? 常见的图像文件格式有:BMP、JPG...BMP格式的图片,没有使用任何压缩算法,这种方式在以前使用的比较多,现在用的就比较少了,不过为了学习图像处理算法,所以先以该种格式的文

    vc++读取bmp格式图片程序

    这是一个用vc++做的读取bmp格式的软件,图像处理包括反色和扫描,以及植株成行。

    读取bmp文件信息头文件

    就是用c语言读取一副bmp图像文件的信息头信息

    读取bmp图片输出RGB值

    读取bmp格式图片,输出图片的RGB值存在txt文件中。

    bmp格式图片转换为raw格式

    一个实现bmp格式图片转换为raw纯数据格式的C++程序,经调试通过,使用时修改程序中H、W为自己图片的高和宽即可。

    BMP格式图片信息读取及保存(VC6.0)

    BMP格式图片信息读取及保存:宽、高、每像素所占位数、灰度图像的颜色表、位图RGB数据等

    OpenGL读取、显示bmp图片

    测试环境:xcode13.3 MacPro13-inch2020 M1 OpenGL版本:OpenGL 4.5 ...测试图片格式:bmp 建议: 1.先完成xcode配置OpenGL工程环境,网上有教程。 2.本程序支持读取任意分辨率的bmp图片,并显示。

    Java读取所有色bmp图片格式

    Java语言读取所有色bmp图片格式,包括1bit 4bit 8bit 24bit,都在BmpUtil这个Java工具类中!

    C语言读取BMP图像数据

    只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB...

    BMP图像文件的读取

    vs2013 BMP图像文件的读取 获取bmp图像文件的头文件格式以及每点的像素值,并且实现了图像的旋转,保存图像

    BMP 24位图转16位位图的程序 exe

    24位BMP图片转565格式16位数组C文件代码,生成的代码用于嵌入式程序代码中图片文件显示,BMP图片以数组的形式保存并读取

    bmp4.rar_BMP图片_bmp4图片_bmp4图片格式

    bmp图片读取

    bmp格式文件图象读取

    用于读取BMP格式图片文件信息,以及将新的图像信息写入BMP文件

    C 语言两步实现 RAW 和 BMP 图片格式转换

    利用 C 语言只需两步实现 RAW 格式图片转换成 BMP 格式图片,简单实用容易理解,附代码注释。

    QT中显示bmp图片

    一个很简单的测试程序,在QT中使用SDL2显示bmp图片,程序简单易懂,作为参考

Global site tag (gtag.js) - Google Analytics