Android:统一byte []和int []用法?

时间:2014-11-05 08:43:54

标签: java android arrays

所以我有两行代码不能很好地协同工作,它们如下:

is.readFully(px_data, 0, BMP_SIZE);
bmp.setPixels(px_data, 0, DIMENSION, 0, 0, DIMENSION, DIMENSION);

其中"是"是一个InputStream和" bmp"是一个位图。 px_data的类型为byte []。因此我在第二行有一个编译错误。问题是" readFully()"需要这个类型为byte [],但是" setPixels()"要求它是int []类型。有什么方法可以让他们玩得很好吗?他们似乎没有替代函数原型允许在readFully()中使用int [],反之亦然。

我知道我可以创建一个int []类型的第二个数组并将其复制到带有位移的int []中,但这是在一段时间敏感的代码中发生的,我想避免迭代所有这样做的数据。

从InputStream读入的数据格式为ARGB 8888格式。

这有点烦人,因为文档清楚地说明了sexPixels(),一个32位的ARGB888 px值,这正是我所拥有的,但Java只是不允许我转换类型,所以我不知道如何在不做缓冲区的深层复制的情况下解决这个问题。有人知道解决这个问题的方法吗?

我非常喜欢这样做:

int[] int_arr = px_data;

虽然Java没有这个。另外,我不认为Java有工会,所以我不能只重叠他们的内存访问。

1 个答案:

答案 0 :(得分:0)

抱歉,重读您的问题。您真的想从流中读取int

InputStream is = YOUR_INPUT_STREAM;
DataInputStream dis = new DataInputStream(is);

DataInputStreamreadInt()方法。因此,您可以分配一个int s数组来读取。

final int[] PIXELS = new int[DIMENSION * DIMENSION];

for(int i = 0; i < PIXELS.length; ++i){
  PIXELS[i] = dis.readInt();
}

现在您有一个包含像素数据的int数组,您可以将其应用于Bitmap

bitmap.setPixels(PIXELS, 0, DIMENSION, 0, 0, DIMENSION, DIMENSION);