最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java中如何使用BufferedImage判断图像通道顺序并转RGB/BGR
时间:2017-07-25 编辑:简简单单 来源:一聚教程网
java中BufferedImage判断图像通道顺序并转RGB/BGR
一般来说Java ImageIO处理读取图像时,一般是RGB或ARGB格式,但是有的时候,我们需要图像是BGR格式,
比如通过JNI将图像矩阵传递给动态库,动态库里用OpenCV来处理矩阵,而用OpenCV处理图像时默认通道顺序是BGR,这时就需要一个到BGR转换。
翻了好Java API好久,还真没发现有直接将RGB转BGR的方法,于是只好自己写一个,以下是代码片段,用于实现判断BufferedImage图像类型及通道顺序,并将BufferedImage转为RGB或BGR
实例代码:
代码如下 | 复制代码 |
/** * @param image * @param bandOffset 用于判断通道顺序 * @return */ privatestaticbooleanequalBandOffsetWith3Byte(BufferedImage image,int[] bandOffset){ if(image.getType()==BufferedImage.TYPE_3BYTE_BGR){ if(image.getData().getSampleModel()instanceofComponentSampleModel){ ComponentSampleModel sampleModel = (ComponentSampleModel)image.getData().getSampleModel(); if(Arrays.equals(sampleModel.getBandOffsets(), bandOffset)){ returntrue; } } } returnfalse; } /** * 判断图像是否为BGR格式 * @return */ publicstaticbooleanisBGR3Byte(BufferedImage image){ returnequalBandOffsetWith3Byte(image,newint[]{0,1,2}); } /** * 判断图像是否为RGB格式 * @return */ publicstaticbooleanisRGB3Byte(BufferedImage image){ returnequalBandOffsetWith3Byte(image,newint[]{2,1,0}); } /** * 对图像解码返回RGB格式矩阵数据 * @param image * @return */ publicstaticbyte[] getMatrixRGB(BufferedImage image) { if(null==image) thrownewNullPointerException(); byte[] matrixRGB; if(isRGB3Byte(image)){ matrixRGB= (byte[]) image.getData().getDataElements(0,0, image.getWidth(), image.getHeight(),null); }else{ // 转RGB格式 BufferedImage rgbImage =newBufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_3BYTE_BGR); newColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB),null).filter(image, rgbImage); matrixRGB= (byte[]) rgbImage.getData().getDataElements(0,0, image.getWidth(), image.getHeight(),null); } returnmatrixRGB; } /** * 对图像解码返回BGR格式矩阵数据 * @param image * @return */ publicstaticbyte[] getMatrixBGR(BufferedImage image){ if(null==image) thrownewNullPointerException(); byte[] matrixBGR; if(isBGR3Byte(image)){ matrixBGR= (byte[]) image.getData().getDataElements(0,0, image.getWidth(), image.getHeight(),null); }else{ // ARGB格式图像数据 intintrgb[]=image.getRGB(0,0, image.getWidth(), image.getHeight(),null,0, image.getWidth()); matrixBGR=newbyte[image.getWidth() * image.getHeight()*3]; // ARGB转BGR格式 for(inti=0,j=0;i matrixBGR[j]=(byte) (intrgb[i]&0xff); matrixBGR[j+1]=(byte) ((intrgb[i]>>8)&0xff); matrixBGR[j+2]=(byte) ((intrgb[i]>>16)&0xff); } } returnmatrixBGR; } |
-
上一个: java实现word文件转html文件
-
下一个: java连接数据库(代码分享)
相关文章
- PS制作旋转八卦图教程 07-27
- PPT如何制作一段月球围绕地球转的动画 07-06
- 微软裁员为了什么 补充新鲜血液向云计算服务公司转型 07-05
- 天龙八部手游门派转职详解 转职天龙注意事项 07-03
- 龙之谷手游刺客转职加点如何选 06-27
- 美图GIF怎么将视频转成GIF 06-26