JAVA 以位元組流讀取檔案中的BMP映像

來源:互聯網
上載者:User

標籤:java   os   io   檔案   for   ar   代碼   amp   

   用位元組流而不是用JAVA的API函數read()有助於大家理解理解BMP的儲存方式哈。

   同時,從SQL中讀取圖片的話,也是用位元組流讀取,需要自己進行轉換的。

   順便儲存下代碼。。。下次用就有模板了。。。

   只有24位元影像的哈。

  public Image myRead(String path) throws java.io.IOException {    Image image = null;      int biWidth,biHeight,bicount,biSizeImage,npad,head,information,size;    try {      FileInputStream fs = new FileInputStream(path);      head = 14;      /**        * head is 14bytes;        */      byte header[] = new byte[head];      fs.read(header, 0, head);      information = 40;         /**       * information is 40bytes;         */      byte info[] = new byte[information];      fs.read(info, 0, information);            /**       * get the wideth of the bmp        */      biWidth = ((int)(info[7]&toDec))<<24           | ((int)(info[6]&toDec))<<16           | ((int)(info[5]&toDec)) << 8          | ((int)(info[4]&toDec));            /**       *   get the heigth of the bmp       */      biHeight = ((int)(info[11]&toDec))<<24           | ((int)(info[10]&toDec))<<16           | ((int)(info[9]&toDec)) << 8          | ((int)(info[8]&toDec));           bicount = (((int)info[15] & toDec) << 8)           | (int)info[14] & toDec;             /**       * get the size of the image       */      biSizeImage = ((int)(info[23]&toDec))<<24           | ((int)(info[22]&toDec))<<16           | ((int)(info[21]&toDec)) << 8          | ((int)(info[20]&toDec));            if (bicount == 24) {        /**         *   compute the empty byte          */        npad = (biSizeImage / biHeight) - biWidth*3;        /**           * if the BitCount is 24, every pixel has 3           */        if (npad ==4 ) {          npad = 0;        }        /*  compute the size of pixel  */        size = (biWidth + npad) * 3 *biHeight;        byte alRgb[];        if (npad != 0) {          /**           * creat a array to save RGB data           */          alRgb = new byte[(biWidth + npad) * 3 *biHeight];        } else {          /**           * creat a array to save RGB data           */          alRgb = new byte[biSizeImage];        }                /*   read all rgb data  */        fs.read(alRgb, 0 , size);        int rgbData[] = new int[biHeight*biWidth];                /*   translate hexadecimal data to decimal data   */        int nindex = 0;        for(int j = 0; j < biHeight; j++){            for(int i = 0; i < biWidth; i++){              rgbData[biWidth * (biHeight - j - 1) + i] =                  (255 & 0xff) << 24                  | (((int)alRgb[nindex + 2] & 0xff) << 16)                  | (((int)alRgb[nindex + 1] & 0xff) << 8)                  | (int)alRgb[nindex] & 0xff;              nindex += 3;            }            nindex += npad;          }         /*  creat image object */        image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(              biWidth, biHeight, rgbData, 0, biWidth));        }      fs.close();      } catch (IOException e) {      return null;    }    return image;    }    public Image myWrite(Image image, String file ) throws java.io.IOException {    try {      int w = image.getHeight(null);      int h = image.getWidth(null);      /**       * ceate graphic       */      BufferedImage bi = new BufferedImage(w,h,BufferedImage.TYPE_3BYTE_BGR);      Graphics g = bi.getGraphics();      g.drawImage(image, 0, 0, null);      /*  open file */      File iFile= new File(file+".bmp");      ImageIO.write(bi, "bmp", iFile);      } catch (IOException e) {        return null;      }     return image;  }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.