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;
答案 0 :(得分:3)
我在您的代码中看到了3个问题
Byte
转换为基本类型int
,您需要致电intValue()
k
增加两倍,以便超出阵列的大小getDataElements
返回对 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[]
,而且一切都应该没问题。