繁体   English   中英

如何从java中的字节数组获取整数数组并打印输出数组? 字节数组来自225*225维的灰度图像

[英]How to get integer array from byte array in java and print the output array? Byte array is from a grayscale image of 225*225 dimension

在这里,我将字节数组data[]类型转换为int 但是在arr[i]获取正整数和负整数值作为输出数组。 但是像素值应该是正数吧? 对于灰度(0 到 255),我想我转换的方式不对。 任何人都可以建议一些代码将我的字节数组data[]转换为整数一维数组arr[]吗?

public class Imagemat {
    public static void main(String[] args) throws Exception  { 
        //*************convert byte array*************//
        BufferedImage bImage = ImageIO.read(new File("image path"));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ImageIO.write(bImage, "jpg", bos);
        byte[] data = bos.toByteArray(); //byte array data[]

         //*****convert to integer array *****//
        int[] arr = new int[data.length];
        for(int i = 0; i < data.length; i++) {
            arr[i] = (int)data[i];
        }
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "  "); //integer array arr[i]
            System.out.println();
        }
    }
}

获得输出如:

-1  -40  -1  -32  0  16  74  70  73  70  0  1  2  0  0  1  0  1  0  0  -1  -37  0  67  0  8  6  6  7  
6  5  8  7  7  7  9  9  8  10  12  20  13  12  11  11  1........

我不确定 JPG 图像是如何以字节存储的,但是要将无符号字节转换为int您可以使用Byte.toUnsignedInt(byte x)来获取Byte.toUnsignedInt(byte x)的无符号值。 (此函数仅返回((int) x) & 0xff以便您可以根据需要使用它)

例子:

int[] arr = new int[data.length];
for(int i = 0; i < data.length; i++) {
   arr[i] = Byte.toUnsignedInt(data[i]);
}
for(int i = 0; i < arr.length; i++) {
   System.out.print(arr[i] + "  "); //integer array arr[i]
   System.out.println();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM