存在很大很大的问题,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格式图片涉及到文件I/O操作、结构体解析、位图格式理解以及可能的颜色转换。通过学习这些知识点,你可以实现自己的BMP读取程序,或者利用现有库进行更复杂的图像处理任务。
本文将深入探讨如何使用MFC框架来读取并显示BMP格式的图片。 首先,我们需要理解MFC的基本架构。MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows API,使开发者可以更方便地创建用户界面和处理...
通过读取bmp格式文件的数据格式,用数组合理的读取后,重新画出该图片
在VC++环境中,读取BMP格式图片是一项基础的图像处理任务。BMP(Bitmap)是一种未经压缩的图像文件格式,通常用于存储位图图像。本项目通过VC++实现了一个程序,可以读取BMP文件,并对其进行反色和扫描操作,还有...
压缩包内包含报告及说明文档。源码环境是VC6,在VS内稍做修改之后也可运行。代码是我大一时所写,可能有部分不妥之处,欢迎指正。由于是比赛作品直接压缩上传,压缩包内包含作者信息、还望尊重作者,不喜勿喷,谢谢...
24位BMP图片转565格式16位数组C文件代码,生成的代码用于嵌入式程序代码中图片文件显示,BMP图片以数组的形式保存并读取。代码可以用TC或VC编译使用
BMP格式图片包含图像的元数据,如宽度(Width,W)、高度(Height,H)、颜色深度等,以及实际像素数据。RAW格式则更接近于相机传感器的数据,通常包含每个像素的红、绿、蓝分量,没有预处理或色彩空间转换。 要...
一、BMP文件分析 1. 什么是BMP(位图)? 常见的图像文件格式有:BMP、JPG...BMP格式的图片,没有使用任何压缩算法,这种方式在以前使用的比较多,现在用的就比较少了,不过为了学习图像处理算法,所以先以该种格式的文
本话题将深入探讨如何读取BMP格式的图片,并从中提取RGB(Red, Green, Blue)颜色信息,然后将这些信息输出到TXT文件中。 RGB色彩模型是计算机图形学中广泛使用的颜色模型,它通过红、绿、蓝三种基本颜色的不同强度...
5. **写入24位BMP文件**:转换完成后,需要将新数据写入新的BMP文件,遵循24位BMP的文件格式标准,包括重新构建文件头和信息头。 6. **错误处理**:在读写文件和内存操作时,应考虑可能出现的异常情况,如内存不足...
本工具专注于将图片从一种格式转换为另一种,特别是JPEG(jpg)与不同位深度的Bitmap(bmp)之间的转换。以下是关于这个主题的详细知识: 1. **JPEG与Bitmap格式**: JPEG(Joint Photographic Experts Group)是...
1. **读取源文件**:首先,我们需要使用Bitmap类的构造函数,传入24位BMP文件的路径来创建一个Bitmap对象,代表源图像。 ```csharp Bitmap sourceBitmap = new Bitmap("原始24位BMP文件路径"); ``` 2. **创建目标...
就是用c语言读取一副bmp图像文件的信息头信息
1. **读取24位BMP图像**:首先,程序需要读取24位BMP图像的文件头信息,包括图像宽度、高度、位深度等,然后解析图像数据,将其按行存储在内存中。 2. **颜色空间转换**:24位BMP图像采用RGB色彩模型,即每个像素由...
本篇文章将深入讲解如何使用Java来读取不同颜色深度的BMP图像,包括1位、4位、8位和24位的BMP文件,并介绍一个名为`BmpUtil`的工具类。 首先,我们需要理解BMP文件的基本结构。BMP文件由文件头、信息头和像素数据三...
标题中的“24位色BMP格式图片生成数组小工具”是一个实用程序,它能够将24位彩色的BMP图像文件转换成C语言数组,以便于在编程项目中直接引用和显示这些图像。这个小工具对于那些需要在嵌入式系统、游戏开发或者任何...
在VB6(Visual Basic 6)中,读取并显示BMP(Bitmap)图片涉及到图形图像处理的基础知识,包括理解BMP文件格式、内存管理以及控件的使用。以下将详细讲解这些知识点。 首先,BMP是一种无损的位图格式,它存储了图像...
在Linux环境下,将一个24位的BMP(Bitmap)图像转换为16位的BMP格式是一项常见的图像处理任务。BMP是一种无损的图像文件格式,它以位(bits)来存储像素颜色信息。24位BMP每个像素由红、绿、蓝三个颜色通道组成,每...
在本文中,我们将深入探讨如何使用C++编程语言来读取和保存BMP(Bitmap)图像,特别是8位和24位的BMP格式。同时,我们还将学习如何将图像转换为灰度图,所有这些操作都不会依赖于任何现有的图像处理库。这个实现具有...