Converting 1D byte Array to 1D Integer Array

时间:2016-06-07 11:28:56

标签: java

I want to convert 1-D Byte Array of pixels of an Image to 1-D integer Array. I have the following code as below:

Byte[] pixels = (Byte[]) img.getRaster().getDataElements(0, 0, width, height, null);

int[] array = new int[pixels.length];

for (int k = 0; k < pixels.length; k++);{
  array[k] = pixels[k++];
}

Whenever I am compiling this code , I am getting the below run time exception: Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to [Ljava.lang.Byte;

3 个答案:

答案 0 :(得分:3)

我在您的代码中看到了3个问题

  1. 要将Byte转换为基本类型int,您需要致电intValue()
  2. 您将局部变量k增加两倍,以便超出阵列的大小
  3. 根据您的例外情况进行无效投射,getDataElements返回
  4.   

    getTransferType()定义的类型数组的对象引用   使用请求的像素数据。

    因此,您应首先检查getTransferType()以了解如何正确投射它。但它似乎是原始类型byte的数组,而不是包装类Byte的数组,因此Byte[] pixels应该是byte[] pixels

    所以预期的代码应该是:

    for (int k = 0; k < pixels.length; k++);{
        array[k] = pixels[k];
    }
    

答案 1 :(得分:1)

Pixels是Byte对象的数组。您正在尝试将其分配给一组int。你应该有这样的东西:array[k] = pixels[k++].intValue();

答案 2 :(得分:1)

问题是Raster#getDataElements()会在您的案例中返回byte[]数组([B)(img.getRaster()会返回WritableRaster和栅格&#39}类型最有可能是DataBuffer.TYPE_BYTE)。但是,您尝试将其转换为Byte[]数组([Ljava.lang.Byte),这是其他内容,因为不存在自动转换,您将获得ClassCastException

将您的代码更改为使用byte[],而且一切都应该没问题。