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格式文件的数据格式,用数组合理的读取后,重新画出该图片
使用这个工具类,你可以方便地读取各种颜色深度的BMP图片,将其转换为Java可以操作的图像对象。在实际应用中,你可能还需要考虑图像的旋转、缩放、裁剪等几何处理,以及颜色空间转换、滤波等图像处理操作。这些都是`...
读取BMP文件并用Java进行处理涉及到对BMP文件格式的理解、字节序的转换以及利用Java AWT库进行图像显示。虽然Java本身不直接支持BMP文件的读取,但通过编写适当的代码,可以实现这一功能,进而为开发图像处理应用...
在实现过程中,Java 提供的 `java.awt.image.BufferedImage` 类可以用于读取、修改和保存 BMP 图像。通过使用 `getRGB()` 和 `setRGB()` 方法,可以访问和修改图像的每个像素。同时,可以使用 `java.io` 包中的类来...
在本篇博文中,我们将探讨如何使用Java编程语言来实现一个简单的画图板应用程序,并学习如何保存和读取BMP(Bitmap)格式的图片。BMP是一种无损图像格式,通常用于存储像素数据,便于程序处理。以下是实现这一功能所...
1. **读取BMP文件**:使用Java的`java.awt.image.BufferedImage`类来读取BMP文件。BMP文件的图像数据是按行存放的,每行数据可能需要填充以保持字节对齐。 ```java FileInputStream fis = new FileInputStream(...
本教程主要探讨如何在编程环境中读取和再存储BMP图片,同时结合批处理操作,提高效率。 首先,我们要理解BMP文件的结构。BMP文件通常包含图像头部信息、颜色表(如果使用了索引颜色)以及像素数据。头部信息包括...
1、使用java ImageIO读取图片,获取其RGB通道信息。 2、使用java NIO读取被嵌入的文件,将其转换为byte数组,需要特别指出的是原生方法得到是byte类型的数组,但是算法实现需要更加精细的操作,所以还需要对得到的...
BMP(Bitmap)是一种常见的位图图像文件格式,广泛用于Windows和OS/2操作系统中。...通过理解和掌握这些知识点,你可以编写一个能够读取BMP图像的程序,并将其嵌入到你的项目中,实现对图像的各种操作。
3. **读取像素数据**:使用编程语言(如Python、C++或Java)的文件操作函数读取图像数据。每读取3个字节,我们就可以得到一个像素的RGB值。 4. **输出到TXT**:将读取到的RGB值写入TXT文件,可以采用逗号分隔每组...
在Java编程语言中,处理BMP(Bitmap)格式的图像是一项相对复杂的任务,因为与JPEG或PNG等其他流行格式相比,Java的标准库对BMP的支持并不直接。标题和描述指出,由于Java内置的图像处理功能有限,特别是对于BMP这种...
在本教程中,我们将深入探讨如何对BMP图像进行简单的处理,包括读取、修改和保存。 1. **BMP文件结构** BMP文件由头信息和像素数据两部分组成。头信息包含了关于图像的基本信息,如宽度、高度、颜色深度等。常见的...
在Java编程语言中,读取图片内容是一项常见的任务,尤其在开发图形用户界面(GUI)应用、处理图像数据或进行图像分析时。本教程将详细解释如何使用Java来读取和处理图片。以下是一些核心知识点: 1. **Java Image I...
在图像处理领域,格式转换是常见的...总的来说,BMP到RAW的转换涉及到对图像文件格式的理解,包括文件结构、颜色模式和数据布局。通过这个转换过程,我们可以更好地掌握图像数据的处理,从而在各种应用场景中灵活运用。
`ImageIO.read()`用于读取图片,`ImageIO.write()`用于保存图片。在这个程序中,这些方法很可能被用来加载和保存JPEG图片。 3. **BufferedImage 类**: `java.awt.image.BufferedImage`是Java中用于存储和操作图像的...
使用Java编写代码来处理8位BMP图像,意味着将涉及基本的文件I/O操作,以及对像素数据的直接操作。提供的资源包括“lips32.bmp”和“lips8.bmp”这样的验证图像,以及.classpath、.project、src、.settings和bin等...
在实际应用中,这可能涉及使用编程语言如Python、C++或Java来实现。例如,在Python中,可以使用PIL(Pillow)库来读取BMP文件,然后通过循环遍历像素,将每个像素的RGB值转换为16进制字符串,并存入列表。 这个转换...
在JAVA中,处理BMP图像时,我们需要理解其内部结构并进行解码,以便正确地读取和显示这些图像。本文将深入探讨JAVA如何对BMP文件进行解码,包括文件头、信息头、调色板和像素数据等关键部分。 1. **文件头(File ...
具体实现可能涉及到编程语言如C++、Python或Java,利用它们提供的文件I/O和图像处理库。 总结来说,BMP文件的读取和处理是计算机图形学中的基础技能,而BGR与RGB的转换则是一个常见的图像处理操作。了解这些知识点...
在Java编程环境中,读取图片分辨率是一项常见的任务,特别是在处理图像数据或进行图像分析时。为了实现这个功能,开发者通常需要依赖一些库来简化工作。在这个场景中,提到的两个库——`metadata-extractor-2.8.1....