最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中如何使用BufferedImage判斷圖像通道順序并轉(zhuǎn)RGB/BGR

 更新時(shí)間:2017年03月24日 10:26:28   作者:10km  
這篇文章主要介紹了java中如何BufferedImage判斷圖像通道順序并轉(zhuǎn)RGB/BGR的相關(guān)資料,需要的朋友可以參考下

java中BufferedImage判斷圖像通道順序并轉(zhuǎn)RGB/BGR

一般來(lái)說(shuō)Java ImageIO處理讀取圖像時(shí),一般是RGB或ARGB格式,但是有的時(shí)候,我們需要圖像是BGR格式,

比如通過(guò)JNI將圖像矩陣傳遞給動(dòng)態(tài)庫(kù),動(dòng)態(tài)庫(kù)里用OpenCV來(lái)處理矩陣,而用OpenCV處理圖像時(shí)默認(rèn)通道順序是BGR,這時(shí)就需要一個(gè)到BGR轉(zhuǎn)換。

翻了好Java API好久,還真沒(méi)發(fā)現(xiàn)有直接將RGB轉(zhuǎn)BGR的方法,于是只好自己寫(xiě)一個(gè),以下是代碼片段,用于實(shí)現(xiàn)判斷BufferedImage圖像類型及通道順序,并將BufferedImage轉(zhuǎn)為RGB或BGR

  實(shí)例代碼:

 /**
   * @param image
   * @param bandOffset 用于判斷通道順序
   * @return
   */
  private static boolean equalBandOffsetWith3Byte(BufferedImage image,int[] bandOffset){
    if(image.getType()==BufferedImage.TYPE_3BYTE_BGR){
      if(image.getData().getSampleModel() instanceof ComponentSampleModel){
        ComponentSampleModel sampleModel = (ComponentSampleModel)image.getData().getSampleModel();
        if(Arrays.equals(sampleModel.getBandOffsets(), bandOffset)){
          return true;
        }
      }
    }
    return false;    
  }
  /**
   * 判斷圖像是否為BGR格式
   * @return 
   */
  public static boolean isBGR3Byte(BufferedImage image){
    return equalBandOffsetWith3Byte(image,new int[]{0, 1, 2});
  }
  /**
   * 判斷圖像是否為RGB格式
   * @return 
   */
  public static boolean isRGB3Byte(BufferedImage image){
    return equalBandOffsetWith3Byte(image,new int[]{2, 1, 0});
  }
  /**
   * 對(duì)圖像解碼返回RGB格式矩陣數(shù)據(jù)
   * @param image
   * @return 
   */
  public static byte[] getMatrixRGB(BufferedImage image) {
    if(null==image)
      throw new NullPointerException();
    byte[] matrixRGB;
    if(isRGB3Byte(image)){
      matrixRGB= (byte[]) image.getData().getDataElements(0, 0, image.getWidth(), image.getHeight(), null);
    }else{
      // 轉(zhuǎn)RGB格式
      BufferedImage rgbImage = new BufferedImage(image.getWidth(), image.getHeight(), 
          BufferedImage.TYPE_3BYTE_BGR);
      new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB), null).filter(image, rgbImage);
      matrixRGB= (byte[]) rgbImage.getData().getDataElements(0, 0, image.getWidth(), image.getHeight(), null);
    } 
    return matrixRGB;
  }
  /**
   * 對(duì)圖像解碼返回BGR格式矩陣數(shù)據(jù)
   * @param image
   * @return
   */
  public static byte[] getMatrixBGR(BufferedImage image){
    if(null==image)
      throw new NullPointerException();
    byte[] matrixBGR;
    if(isBGR3Byte(image)){
      matrixBGR= (byte[]) image.getData().getDataElements(0, 0, image.getWidth(), image.getHeight(), null);
    }else{     
      // ARGB格式圖像數(shù)據(jù)
      int intrgb[]=image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth());
      matrixBGR=new byte[image.getWidth() * image.getHeight()*3];
      // ARGB轉(zhuǎn)BGR格式
      for(int i=0,j=0;i<intrgb.length;++i,j+=3){
        matrixBGR[j]=(byte) (intrgb[i]&0xff);
        matrixBGR[j+1]=(byte) ((intrgb[i]>>8)&0xff);
        matrixBGR[j+2]=(byte) ((intrgb[i]>>16)&0xff);
      }
    } 
    return matrixBGR;
  }

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 解決@NonNull @org.jetbrains.annotations.NotNull報(bào)紅的問(wèn)題

    解決@NonNull @org.jetbrains.annotations.NotNull報(bào)紅的問(wèn)題

    這篇文章主要介紹了解決@NonNull @org.jetbrains.annotations.NotNull報(bào)紅的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • SpringMVC post請(qǐng)求的處理

    SpringMVC post請(qǐng)求的處理

    今天小編就為大家分享一篇解決SpringMVC接收不到ajaxPOST參數(shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-07-07
  • 解決引用jip-common jar包,報(bào)401 Unauthorized錯(cuò)誤問(wèn)題

    解決引用jip-common jar包,報(bào)401 Unauthorized錯(cuò)誤問(wèn)題

    這篇文章主要介紹了解決引用jip-common jar包,報(bào)401 Unauthorized錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • springboot如何根據(jù)配置屏蔽接口返回字段

    springboot如何根據(jù)配置屏蔽接口返回字段

    這篇文章主要介紹了springboot如何根據(jù)配置屏蔽接口返回字段問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Centos中安裝jdk案例講解

    Centos中安裝jdk案例講解

    這篇文章主要介紹了Centos中安裝jdk案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解IDEA搭建springBoot方式一(推薦)

    詳解IDEA搭建springBoot方式一(推薦)

    這篇文章主要介紹了IDEA搭建springBoot方式一(推薦),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 【Java】BigDecimal實(shí)現(xiàn)加減乘除運(yùn)算代碼

    【Java】BigDecimal實(shí)現(xiàn)加減乘除運(yùn)算代碼

    本篇文章主要介紹了【Java】BigDecimal實(shí)現(xiàn)加減乘除運(yùn)算代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • eclipse實(shí)現(xiàn)Schnorr數(shù)字簽名

    eclipse實(shí)現(xiàn)Schnorr數(shù)字簽名

    這篇文章主要為大家詳細(xì)介紹了eclipse實(shí)現(xiàn)Schnorr數(shù)字簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Java中的zookeeper常用命令詳解

    Java中的zookeeper常用命令詳解

    這篇文章主要介紹了Java中的zookeeper常用命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java實(shí)現(xiàn)FTP服務(wù)器功能實(shí)例代碼

    Java實(shí)現(xiàn)FTP服務(wù)器功能實(shí)例代碼

    FTP(File Transfer Protocol 文件傳輸協(xié)議)是Internet 上用來(lái)傳送文件的協(xié)議,本文給大家分享Java實(shí)現(xiàn)FTP服務(wù)器功能實(shí)例代碼,對(duì)java實(shí)現(xiàn)ftp服務(wù)器相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12

最新評(píng)論

高唐县| 阿克陶县| 五原县| 正蓝旗| 望江县| 兰州市| 灌云县| 思茅市| 汾阳市| 轮台县| 定州市| 五河县| 沾化县| 鄂托克旗| 夏河县| 应用必备| 沧州市| 保德县| 离岛区| 嘉峪关市| 靖安县| 婺源县| 莆田市| 平邑县| 苍南县| 沭阳县| 晋州市| 图木舒克市| 榆社县| 临江市| 修武县| 本溪市| 岳阳县| 股票| 会泽县| 武平县| 中超| 陈巴尔虎旗| 吉首市| 浦北县| 沽源县|