所以我有两行代码不能很好地协同工作,它们如下:
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有工会,所以我不能只重叠他们的内存访问。
答案 0 :(得分:0)
抱歉,重读您的问题。您真的想从流中读取int
。
InputStream is = YOUR_INPUT_STREAM;
DataInputStream dis = new DataInputStream(is);
DataInputStream
有readInt()
方法。因此,您可以分配一个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);