`
Cb123456
  • 浏览: 66208 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

保存成bmp格式

    博客分类:
  • java
阅读更多

 此Demo用来说明保存成Bmp格式

 步骤1:以以前做的画图板为例,点击"保存按钮后",保存到"E:\\test3.bmp"

 运行效果:

 
 

 源码:

 

	private Robot robot;

		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			String actionCommand = e.getActionCommand();
			// System.out.println("得到的ActionCommand"+actionCommand);
			if(actionCommand.equals("保存")){
				try {
					robot = new Robot();
				} catch (AWTException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				Rectangle screenRect = new Rectangle(drawpanelX,drawpanelY,drawpanelWidth,drawpanelHeight);
				BufferedImage img =robot.createScreenCapture(screenRect);
				
				BMPWriter bmp = new BMPWriter();
	            //IndexColorModel mf = new IndexColorModel(8, 16, r,  g, b);
				
				File out = new File("E:\\test3.bmp");
				bmp.write(img, out);
				
				
				
			}

		}

 

 

 

  步骤2 :BMPWriter,用来保存成BMP

 

import java.awt.image.BufferedImage;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class BMPWriter {

	public static void write(BufferedImage img, File out) {

		int width = img.getWidth();
		int tripleWidth = width * 3;
		int height = img.getHeight();
		int fullTriWidth = tripleWidth % 4 == 0 ? tripleWidth
				: 4 * ((tripleWidth / 4) + 1);
		int[] px = new int[width * height];
		px = img.getRGB(0, 0, width, height, px, 0, width);
		byte[] rgbs = new byte[tripleWidth * height];
		int index = 0;
		// r, g, b数组
		for (int i = height - 1; i >= 0; i--) {
			for (int j = 0; j < width; j++) {
				int pixel = px[i * width + j];
				rgbs[index++] = (byte) pixel;
				rgbs[index++] = (byte) (pixel >>> 8);
				rgbs[index++] = (byte) (pixel >>> 16);
			}
		}
		// 补齐扫描行长度为4的倍数
		byte[] fullrgbs = new byte[fullTriWidth * height];
		for (int i = 0; i < height; i++) {
			for (int j = 0; j < fullTriWidth; j++) {
				if (j < tripleWidth) {
					fullrgbs[fullTriWidth * i + j] = rgbs[i * tripleWidth + j];
				} else {
					fullrgbs[fullTriWidth * i + j] = 0;
				}
			}
		}

		index = 0;

		int fheader = 14;
		int infoheader = 40;
		int board = 0;
		int offset = fheader + infoheader + board;
		int length = width * height * 3 + offset;
		short frame = 1;
		short deep = 24;
		int fbl = 3800;
		DataOutputStream dos = null;
		try {
			FileOutputStream fos = new FileOutputStream(out);
			dos = new DataOutputStream(fos);
			dos.write('B');
			dos.write('M');// 1格式头
			wInt(dos, length);// 2-3文件大小
			wInt(dos, 0);// 4-5保留
			wInt(dos, offset);// 6-7偏移量
			wInt(dos, infoheader);// 8-9头信息
			wInt(dos, width);// 10-11宽
			wInt(dos, height);// 12-13高
			wShort(dos, frame);// 14 = 1帧数
			wShort(dos, deep);// 15 = 24位数
			wInt(dos, 0);// 16-17压缩
			wInt(dos, 4);// 18-19 size
			wInt(dos, fbl);// 20-21水平分辨率
			wInt(dos, fbl);// 22-23垂直分辨率
			wInt(dos, 0);// 24-25颜色索引 0为所有
			wInt(dos, 0);// 26-27重要颜色索引 0为所有
			// wInt(0);//28-35
			// wInt(0);
			// wInt(0);
			// wInt(0);//28-35彩色板
			dos.write(fullrgbs);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				dos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void wInt(DataOutputStream dos, int i) throws IOException {
		dos.write(i);
		dos.write(i >> 8);
		dos.write(i >> 16);
		dos.write(i >> 24);
	}

	private static void wShort(DataOutputStream dos, short i)
			throws IOException {
		dos.write(i);
		dos.write(i >> 8);
	}

}

  

 

  总结:BMPWriter这个类网上很多的,写法也大同小异,我见的一般就是传个Color[][],然而,当初怎么也搞不出了,最近突然脑子闪了一下,用步骤一,得到BufferedImage,里面就有Color[][],就能很好实现存储为BMP了. 

  • 大小: 5.2 MB
0
0
分享到:
评论

相关推荐

    利用微软提供的directshow从视屏流中每隔0.3秒连续抓取图像帧,并自动按顺序保存成BMP格式FrameseriesGrabber.rar

    在这个场景中,我们将探讨如何利用DirectShow从视频流中连续抓取图像帧,并将它们保存为BMP格式的图片。 首先,我们要了解DirectShow的工作原理。DirectShow基于COM(Component Object Model)组件模型,它包含了一...

    Android中把bitmap存成BMP格式图片的方法

    本文将详细介绍如何在Android中将Bitmap转换为BMP格式。 首先,Android SDK提供了`Bitmap.compress()`方法来将Bitmap保存为JPEG或PNG格式,但不支持BMP。因此,我们需要自定义一个方法来处理BMP格式的转换。这个...

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

    在本文中,我们将深入探讨如何使用C++编程语言在VC6.0环境下读取和保存BMP(位图)格式的图像文件。BMP是一种无损的图像文件格式,广泛用于...通过掌握这些知识点,你就可以在C++环境中自由地处理BMP格式的图像文件了。

    截屏并保存为BMP文件

    截屏并保存为BMP文件,截取屏幕上任意矩形,并保存为BMP图片文件

    自制画板打开和保存BMP格式文件

    总的来说,自制画板打开和保存BMP格式文件涉及到的知识点包括:BMP文件格式的理解与解析,二进制文件操作,图像处理基础,GUI编程,以及事件驱动编程。这个项目既能够加深对图像文件格式的理解,也能锻炼实际编程...

    将BufferedImage保存为BMP格式的文件

    从给定的文件信息来看,我们正在探讨如何使用...总之,理解BMP文件的结构和使用Java将`BufferedImage`保存为BMP格式的文件是图像处理领域的重要技能,尤其是在需要精确控制图像输出格式或进行低级图像操作的场景下。

    窗口DC保存至BMP,JPG

    - 对于BMP格式,GDI+的Bitmap类提供了Save方法,可以直接将位图保存为BMP文件。BMP是无损的,但文件通常较大。 - 对于JPG格式,由于GDI+也支持JPEG编码,同样可以通过Bitmap的Save方法,指定ImageFormatJPEG作为...

    Android4.0下使用framebuffer抓屏并保存成bmp文件

    在Android 4.0(Ice Cream Sandwich)版本中,开发者可以通过访问framebuffer来实现屏幕抓取功能,即获取当前屏幕的图像并保存为图像文件,如BMP格式。下面我们将详细讨论如何在Android 4.0下使用framebuffer抓屏并...

    VC屏幕截图, 并保存为bmp格式的图片

    本文将深入探讨如何使用Visual C++(VC)结合Windows API来实现屏幕截图,并将其保存为BMP格式的图片。 首先,我们要了解Windows API中的基本概念。API(Application Programming Interface)是一组预定义的函数、...

    C++生成二维码并保存成BMP图片

    本教程将详细解释如何利用libqrencode库来实现这一功能,并最终将生成的二维码以BMP格式保存。 libqrencode是一个开源的C库,专门用于生成二维码,支持多种数据类型,如文本、URL、二进制数据等。首先,你需要在...

    framebuffer数据转换成BMP格式图片的源代码

    在Linux操作系统下,将framebuffer中的缓存数据(也就是raw格式的数据)转换成BMP格式的图片

    RAW格式图像转化为bmp

    使用`imwrite`函数将内存中的图像矩阵保存为BMP格式的文件。 #### 7. 清理资源 ```cpp fclose(fp); return 0; ``` 最后关闭文件指针并返回0表示程序正常结束。 ### 总结 通过上述代码示例,我们了解了如何使用...

    BMP格式图像的读取与保存

    根据提供的文件信息,本文将详细解释BMP格式图像的读取与保存的相关知识点,包括BMP文件的基本结构、如何读取BMP文件以及如何保存BMP文件等内容。 ### BMP文件基本结构 BMP(Bitmap Image File Format)是一种常见...

    保存屏幕为BMP图片

    在Windows操作系统中,可以使用内置的“Snipping Tool”或“Snip & Sketch”应用程序来捕获屏幕并保存为BMP格式。用户只需打开相应工具,选择截图类型(如矩形、自由形状、全屏等),然后选取要截图的区域,最后选择...

    jpeg转bmp格式

    本文将深入探讨如何使用C语言实现从JPEG格式转换为BMP格式的过程,这在嵌入式系统和网络传输中尤其重要。 首先,我们要理解JPEG和BMP这两种图片格式。JPEG(Joint Photographic Experts Group)是一种广泛使用的...

    Qt之生成png/jpg/bmp格式图片

    在Qt框架中,生成并保存png、jpg和bmp格式的图片是常见的需求,尤其是在进行图形用户界面(GUI)开发时。QImage和QPainter是Qt提供的两个关键类,用于图像处理和绘制。以下是对这两个类及其在生成不同格式图片中的...

    16*16bmp格式高清位图

    这些库提供了读取、修改和保存BMP图像的功能。此外,为了将BMP转换为其他格式,如ICO(Windows图标文件格式),开发者可能需要使用特定的工具或API,因为ICO格式可以包含多种尺寸和色彩深度的图标。 在UI设计和编程...

    ICO文件转化成BMP格式.rar

    ICO文件和BMP格式是两种常见的图像文件类型,在计算机图形处理中各有其特定用途。ICO文件主要用于网站的图标,而BMP文件则是无损的位图格式,常见于各种操作系统中。下面将详细介绍ICO和BMP文件的特性、转换过程以及...

    利用java实现画图板和保存读取BMP格式的图片(一)

    通过以上步骤,我们可以构建一个基础的画图板程序,用户可以在界面上自由绘制,并将作品保存为BMP格式。同时,程序也可以加载已有的BMP文件,显示在画图板上。这只是一个简单的起点,实际的应用可能需要更多的功能,...

Global site tag (gtag.js) - Google Analytics