国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

自己寫了一個imagebuffer 轉 bmp 流的代碼段,希望對大家有用。

2024-07-21 02:15:23
字體:
來源:轉載
供稿:網友
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文件格式的定義,更加具體的說明可以到http://www.wotsit.org找
   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();   
  }

如果有什么不明白的,請聯系我[email protected],我將盡我所能的幫助你。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松溪县| 德令哈市| 大竹县| 滁州市| 定日县| 罗山县| 南川市| 闽侯县| 迁安市| 雷州市| 聂荣县| 靖宇县| 长泰县| 禄丰县| 普宁市| 遵义市| 利津县| 宜兴市| 昌黎县| 郎溪县| 美姑县| 武乡县| 汝州市| 都安| 芜湖县| 莒南县| 昂仁县| 福贡县| 谷城县| 仙桃市| 修武县| 乐平市| 方正县| 垣曲县| 昌江| 济源市| 桂阳县| 合川市| 合川市| 衡山县| 沛县|