一个ImageBuffer转bmp的代码

开发 后端
本文提供了imagebuffer转bmp 的代码片段。

下面提供了imagebuffer 转 bmp 的代码片段:

try {
   BufferedImage bi = null;
   if (isURL == true) {
    bi = ImageIO.read(new URL(inFileName));
   }
   else {
    bi = ImageIO.read(new File(inFileName));
   }
  
   int[] rgbArray = new int[101 * 29];//我测试用的图象文件象素值宽度是101宽,29长的
  
   bi.getRGB(0, 0, 101, 29, rgbArray, 0, 101);
   for (int i = 0; i < 101 * 29; i++) {//我做的只是双色图,所以这里查出每一个象素是1(黑)还是0(白)
    if ((rgbArray[i] & 0xffffff) == 0x000000)
     rgbArray[i] = 0;
    else
     rgbArray[i] = 1;
   }
   //以下是BMP文件格式的定义,更加具体的说明可以到找
   int[] identifier = { @#B@#, @#M@# };
   int[] fileSize = { 0x0E, 0x02, 0x00, 0x00 };
   int[] reserved = { 0x00, 0x00, 0x00, 0x00 };
   int[] bitmapDataOffset = { 0x3E, 0x00, 0x00, 0x00 };
   int[] bitmapHeaderSize = { 0x28, 0x00, 0x00, 0x00 };
   int[] width = { 0x65, 0x00, 0x00, 0x00 };
   int[] height = { 0x1D, 0x00, 0x00, 0x00 };
   int[] planes = { 0x01, 0x00 };
   int[] bitsPerPixel = { 0x01, 0x00 };
   int[] compression = { 0x00, 0x00, 0x00, 0x00 };
   int[] bitmapDataSize = { 0xD0, 0x01, 0x00, 0x00 };
   int[] hResolution = { 0x00, 0x00, 0x00, 0x00 };
   int[] vResolution = { 0x00, 0x00, 0x00, 0x00 };
   int[] colors = { 0x00, 0x00, 0x00, 0x00 };
   int[] importantColors = { 0x00, 0x00, 0x00, 0x00 };
   int[] palette = { 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00 };
   //记住bmp没一个扫描行都要扩充到下一个4bytes的倍数,如101就要变成128,扩充的byte补0即可
   int[] bitmapData = new int[(101 + 27) * 29 / 8];
   int n = 0;
   for (int i = 0; i < 29; i++) { //BMP格式是从最后一行开始scan的
    for (int j = 1; j <= 101; j++) {
     if (rgbArray[(28 - i) * 101 + j - 1] == 1) {
      bitmapData[n] = bitmapData[n] | (1 << (8 - j % 8) % 8);
     }
     if (j % 8 == 0) {
      n++;
     }
     if (j == 101) {
      n += 4;
     }
    }
   }
   RandomAccessFile o = new RandomAccessFile(outFileName, "rw");
   o.setLength(0);
   for (int i = 0; i < identifier.length; i++) {
    o.write(identifier[i]);
   }
   for (int i = 0; i < fileSize.length; i++) {
    o.write(fileSize[i]);
   }
   for (int i = 0; i < reserved.length; i++) {
    o.write(reserved[i]);
   }
   for (int i = 0; i < bitmapDataOffset.length; i++) {
    o.write(bitmapDataOffset[i]);
   }
   for (int i = 0; i < bitmapHeaderSize.length; i++) {
    o.write(bitmapHeaderSize[i]);
   }
   for (int i = 0; i < width.length; i++) {
    o.write(width[i]);
   }
   for (int i = 0; i < height.length; i++) {
    o.write(height[i]);
   }
   for (int i = 0; i < planes.length; i++) {
    o.write(planes[i]);
   }
   for (int i = 0; i < bitsPerPixel.length; i++) {
    o.write(bitsPerPixel[i]);
   }
   for (int i = 0; i < compression.length; i++) {
    o.write(compression[i]);
   }
   for (int i = 0; i < bitmapDataSize.length; i++) {
    o.write(bitmapDataSize[i]);
   }
   for (int i = 0; i < hResolution.length; i++) {
    o.write(hResolution[i]);
   }
   for (int i = 0; i < vResolution.length; i++) {
    o.write(vResolution[i]);
   }
   for (int i = 0; i < colors.length; i++) {
    o.write(colors[i]);
   }
   for (int i = 0; i < importantColors.length; i++) {
    o.write(importantColors[i]);
   }
   for (int i = 0; i < palette.length; i++) {
    o.write(palette[i]);
   }
   for (int i = 0; i < bitmapData.length; i++) {
    o.write(bitmapData[i]);
   }
   o.close();
  }
  catch (MalformedURLException e) {
   e.printStackTrace();
  }
  catch (IOException e) {
   e.printStackTrace();  
  }

 

 

【编辑推荐】

  1. JavaOne 2009第三天:微软与Sun/Oracle携手并进
  2. 开发高可移植性J2ME的软件
  3. Java虚拟机(JVM)中的内存设置详解]
  4. 20个开发人员非常有用的Java功能代码
  5. JavaFX和Java之间的互操作性
责任编辑:王观 来源: 百家编程
相关推荐

2011-07-19 09:46:00

Oracle数据库递归查询

2009-06-11 10:59:19

netbeans提示

2022-10-14 17:48:55

D2C代码vue

2016-09-26 17:26:20

2024-05-15 10:07:11

Agents人工智能CSV

2024-05-16 12:03:54

Python代码开发

2014-10-14 15:50:19

UIAndroid

2023-01-03 12:30:25

架构CPUGPU

2018-06-23 08:02:31

程序员代码故事

2009-06-22 13:50:00

java连接mysql

2022-07-14 16:18:32

massCode开源

2020-06-28 08:10:00

GoGOSSAFUNC图编程语言

2022-10-31 07:09:15

拷贝代码项目

2021-08-23 11:35:37

代码开发开源

2024-01-08 13:47:00

代码分析工具

2015-04-17 09:18:35

JavaiOS

2011-07-20 13:40:00

SQLite数据库查询数据

2021-02-03 19:46:01

工具Snipaste软件开发

2023-10-26 11:22:32

2012-05-17 09:21:21

软件测试软件开发
点赞
收藏

51CTO技术栈公众号