快速业务通道

用Java保存位图文件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
中的颜色索引数。如果 biBitCount 设为 24,则 biClrUsed 指定用来优化 Windows 调色板性能的参考颜色表。

biClrImportant:指定对位图的显示有重要影响的颜色索引数。如果此值为 0,则所有颜色都很重要。

现在已定义了创建图像所需的全部信息。

第 3 部分:图像

在 24 位格式中,图像中的每个象素都由存储为 BRG 的三字节 RGB 序列表示。每个扫描行都被补足到 4 位。为了使这个过程稍复杂一点,图像是自底而上存储的,即第一个扫描行是图像中的最后一个扫描行。下图显示了标头 (BITMAPHEADER) 和 (BITMAPINFOHEADER) 以及部分图像。各个部分由垂线分隔:

0000000000 4D42 B536 0002 0000 0000 0036 0000 | 0028 0000000020 0000 0107 0000 00E0 0000 0001 0018 0000 0000000040 0000 B500 0002 0EC4 0000 0EC4 0000 0000 0000000060 0000 0000 0000 | FFFF FFFF FFFF FFFF FFFF 0000000100 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF *

用Java保存位图文件(3)

时间:2010-12-25

现在,我们开始检视代码

现在我们已经知道了 24 位位图文件的结构,下面就是您期待已久的内容:用来将图像对象写入位图文件的代码。import java.awt.*; import java.io.*; import java.awt.image.*; public class BMPFile extends Component { file://--- 私有常量 private final static int BITMAPFILEHEADER_SIZE = 14; private final static int BITMAPINFOHEADER_SIZE = 40; file://--- 私有变量声明 file://--- 位图文件标头 private byte bitmapFileHeader [] = new byte [14]; private byte bfType [] = {''B'', ''M''}; private int bfSize = 0; private int bfReserved1 = 0; private int bfReserved2 = 0; private int bfOffBits = BITMAPFILEHEADER_SIZE + BITMAPINFOHEADER_SIZE; file://--- 位图信息标头 private byte bitmapInfoHeader [] = new byte [40]; private int biSize = BITMAPINFOHEADER_SIZE; private int biWidth = 0; private int biHeight = 0; private int biPlanes = 1; private int biBitCount = 24; private int biCompression = 0; private int biSizeImage = 0x030000; private int biXPelsPerMeter = 0x0; private int biYPelsPerMeter = 0x0; private int biClrUsed = 0; private int biClrImportant = 0; file://--- 位图原始数据 private int bitmap []; file://--- 文件部分 private FileOutputStream fo; file://--- 缺省构造函数 public BMPFile() { } public void saveBitmap (String parFilename, Image parImage, int parWidth, int parHeight) { try { fo = new FileOutputStream (parFilename); save (parImage, parWidth, parHeight); fo.close (); } catch (Exception saveEx) { saveEx.printStackTrace (); } } /* * saveMethod 是该进程的主方法。该方法 * 将调用 convertImage 方法以将内存图像转换为 * 字节数组;writeBitmapFileHeader 方法创建并写入 * 位图文件标头;writeBitmapInfoHeader 创建 * 信息标头;writeBitmap 写入图像。 * */ private void save (Image parImage, int parWidth, int parHeight) { try { convertImage (parImage, parWidth, parHeight); writeBitmapFileHeader (); writeBitmapInfoHeader (); writeBitmap (); } catch (Exception saveEx) { saveEx.printStackTrace (); } } /* * convertImage 将内存图像转换为位图格式 (BRG)。 * 它还计算位图信息标头所用的某些信息。 * */ private boolean convertImage (Image parImage, int parWidth, int parHeight) { int pad; bitmap = new int [parWidth * parHeight]; PixelGrabber pg = new PixelGr

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号