BMP图片格式,是windows自带的一个图片格式,(*bmp),在windows的系统下都支持这种格式,bmp格式与设备无关的位图(DIB)格式,BMP简称位图,BMP的原始数据是没有经过压缩处理的 占用的空间比其它格式的图片要大
BMP由四部分组成 ,位图文件头 , 位图信息头 , 颜色 , 图像数据区
BMP图片是三个字节为一个颜色保存,将字节拼接为int需要使用位移来做
位图文件头 (12个字节):
0000-0001:文件标识,为字母ASCII码“BM”,42 4D。
0002-0005:整个文件大小,单位字节。
0006-0009:这个位置的数字是被微软保留的
000A-000D:记录图像数据区的起始位置。从文件开始到位图数据(bitmap data)之间的偏移量。
位图信息头()
000E-0011:图像描述信息块的大小
0012-0015:图像宽度。以像素为单位。
0016-0019:图像高度。以像素为单位。
001A-001B:图像的plane总数(恒为1)。
001C-001D:记录像素,也就是颜色。1 - Monochrome bitmap,4 - 16 color bitmap,8 - 256 color bitmap,F - 16位位图,18 - 24bit (true color) bitmap,20 - 32位位图。
001E-0021:数据压缩方式(数值位0:不压缩;1:8位压缩;2:4位压缩;3:Bitfields压缩)。
0022-0025:图像区数据的大小。单位字节,该数必须是4的倍数。
0026-0029:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002A-002D:垂直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002E-0031:此图像所用的颜色数。
0032-0035:指定重要的颜色数。当该域的值等于颜色数时(或者等于0时),表示所有颜色都一样重要。
颜色
每一个字节表示一个颜色 r 0~255 g 0~255 b 0~255 保留一位
图像数据区
从下到上 从左往右的顺序扫描
JAVA写一个读取BMP图片
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 图片查看器的窗口
*
* @author Administrator
*
*/
public class priUI extends JFrame {
public static void main(String[] args) {
priUI ui = new priUI();
ui.initUI();
}
public void initUI() {
this.setSize(600, 500);
this.setTitle("图片查看器");
// 设置布局
FlowLayout layout = new FlowLayout();
this.setLayout(layout);
JPanel center = new myPanel();
center.setPreferredSize(new Dimension(400, 300));
center.setBackground(Color.WHITE);
this.add(center);
this.setDefaultCloseOperation(3);
this.setVisible(true);
}
/**
* 读取BMP文件的方法(BMP24位)
*/
public int[][] readFile(String path) {
try {
// 创建读取文件的字节流
FileInputStream fis = new FileInputStream(path);
BufferedInputStream bis = new BufferedInputStream(fis);
// 读取时丢掉前面的18位,
// 读取图片的18~21的宽度
bis.skip(18);
byte[] b = new byte[4];
bis.read(b);
// 读取图片的高度22~25
byte[] b2 = new byte[4];
bis.read(b2);
// 得到图片的高度和宽度
int width = byte2Int(b);
int heigth = byte2Int(b2);
// 使用数组保存得图片的高度和宽度
int[][] date = new int[heigth][width];
int skipnum = 0;
if (width * 3 / 4 != 0) {
skipnum = 4 - width * 3 % 4;
}
// 读取位图中的数据,位图中数据时从54位开始的,在读取数据前要丢掉前面的数据
bis.skip(28);
for (int i = 0; i < date.length; i++) {
for (int j = 0; j < date[i].length; j++) {
// bmp的图片在window里面世3个byte为一个像素
int blue = bis.read();
int green = bis.read();
int red = bis.read();
// 创建一个Color对象,将rgb作为参数传入其中
Color c = new Color(red, green, blue);
// Color c = new Color(blue,green,red);
// 将得到的像素保存到date数组中
date[i][j] = c.getRGB();
}
// 如果补0的个数不为0,则需要跳过这些补上的0
if (skipnum != 0) {
bis.skip(skipnum);
}
}
return date;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 将四个byte拼接成一个int
public int byte2Int(byte[] by) {
int t1 = by[3] & 0xff;
int t2 = by[2] & 0xff;
int t3 = by[1] & 0xff;
int t4 = by[0] & 0xff;
int num = t1 << 24 | t2 << 16 | t3 << 8 | t4;
return num;
}
class myPanel extends JPanel {
public void paint(Graphics g) {
super.paint(g);
// 读取数据
int[][] date = readFile("C:\\Users\\Administrator\\Desktop\\meinv.bmp");
// 判断是否存在
if (date != null) {
// this.setPreferredSize(new
// Dimension(date[0].length,date.length));
this.setPreferredSize(new Dimension(date[0].length, date.length));
// 遍历
for (int i = 0; i < date.length; i++) {
for (int j = 0; j < date[i].length; j++) {
Color c = new Color(date[i][j]);
g.setColor(c);
g.drawLine(j, date.length - i, j, date.length - i);
}
}
}
}
}
}
分享到:
相关推荐
通过读取bmp格式文件的数据格式,用数组合理的读取后,重新画出该图片
使用java语言来读取bmp图像文件信息
Java语言读取所有色bmp图片格式,包括1bit 4bit 8bit 24bit,都在BmpUtil这个Java工具类中!
NULL 博文链接:https://bill56.iteye.com/blog/2272034
1、使用java ImageIO读取图片,获取其RGB通道信息。 2、使用java NIO读取被嵌入的文件,将其转换为byte数组,需要特别指出的是原生方法得到是byte类型的数组,但是算法实现需要更加精细的操作,所以还需要对得到的...
java程序,读取BMP图片的数据存到数组中,利用java类的压缩算法,将BMP图片转换为JPG格式的图片。
JAVA图像处理读取BMP图像、用RGB获取灰度信息、直方图均衡化、拉普拉斯2阶滤波、平滑锐化、增强滤波、局部阀值处理、全局阀值处理等
java准确读取flash以及jpg,gif,bmp等格式文件源码.rar
支持将DDS图像数据转换为BufferedImage,以便在GUI程序中...可以简单地认为这些dds文件同bmp、tga等常见的图片格式一样,记录了一张图片的信息,如果我们在photoshop中使用dds的插件,就可以在photoshop中打开这些文件。
嵌入式bmp图片工具,可生成RGB565格式的C语言代码,可选择某点,获取该点的565颜色,点点住鼠标拖动,可得到该区域的大小,起点。
读取图片很简单就是把要识别的验证码图片读取到我们的程序里,网络上常见的验证码图片格式有BMP,JPG,GIF,PNG,其中BMP的图片格式种类很多,但都不复杂,24位BMP格式最简单,除去54字节的文件头,只需要顺序读取BMP...
JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换 JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
javax.imageio.event Java Image I/O API 的一个包,用于在读取和写入图像期间处理事件的同步通知。 javax.imageio.metadata 用于处理读写元数据的 Java Image I/O API 的包。 javax.imageio.plugins.bmp 包含供...
BMPImage.java-包含读取的BMP文件信息的结构 BMPTool.java-创建修改/复制BMP文件的方法 Run.java-菜单并运行 怎么跑 使用javac编译BMPImage.java BMPTool.java Run.java 使用“ java Run”或“ java [args] --help...
提供了一系列编写好的函数,可直接对2色位图、16色位图、256色位图、24位真彩色、32位增强真彩色位图进行读取、写入、格式互相转换、反色等操作。windows和linux下通用,仅调用标准C函数,保证兼容性。包含一个范例...
此压缩文件中包含了两个读取bmp文件分别用java和c写了,另三个是用matlab实现的演化算法,很有作用的,每个文件里都有详细说明
通过文件头识别文件类型,图片大小 支持格式: "JPEG", "GIF", "PNG", "BMP", "PCX", "IFF", "RAS", "PBM", "PGM", "PPM", "PSD", "SWF", "KRO
1、实现友好的Windows画板界面,包括Windows基本菜单、画图功能菜单和常用菜单的工具栏。...8、实现BMP位图文件的读取和存储。 9、将开发好的应用程序及其所需的DLL文件通过打包软件,制作成安装程序,以供他人使用。
Java提取压缩包中的文件,文件操作的范畴,操作对象为ZIP格式的压缩文件,将从ZIP中提取出BMP图像文件,要将从压缩包中提取文件,必须先解压压缩包,然后将指定文件拷贝出来,代码中先实现了对zip文件的解压,然后...
javax.imageio.event Java Image I/O API 的一个包,用于在读取和写入图像期间处理事件的同步通知。 javax.imageio.metadata 用于处理读写元数据的 Java Image I/O API 的包。 javax.imageio.plugins.bmp 包含供内置...