高效存储二进制图像数据

时间:2011-03-29 20:06:03

标签: java image binary

我想用Java存储大量同样大小的大型3D二进制图像。我目前的思考过程是将信息存储在byte []的每个位中。因此,在一个图像的空间中,我可以有效地存储8个图像(每位一个图像)。我有以下循环来获取/设置图像数据。

final byte[] storedArray = organData.get(imageNumber);
final short[] binaryArray = getArray(binaryOrgan);

int i=0;
for (short binaryData : binaryArray) {
    byte storedData = (byte)storedArray[i];
    if (binaryData == 0)
        storedData &= ~(1 << bitNumber);
    else
        storedData |= (1 << bitNumber);
    storedArray[i] = storedData;
    ++i;
}

获取

final byte[] storedArray = organData.get(imageNumber);
final short[] binaryArray = getArray(binaryImage);

int i=0;
for (short storedData : storedArray) {
    binaryArray[i] = (short)((storedData >> bitNumber) & 1);
    ++i;
}

目前这些工作正常,但速度太慢。有没有办法加快速度?例如,只需获取byte []中每个元素的第n位而不迭代byte []?理想情况下,我想在HashMap(我正在使用的)中查找它的速度和它一样快。

PS如果有另一种方法可以有效地存储并快速获取/设置一组二进制图像,我很满意。

1 个答案:

答案 0 :(得分:1)

喜欢这样:

private static final int MASKS[] = new int[] {
1, 2, 4, 8, 16, 32, 64, 128};

然后

int imageIndex;
boolean colorSet = (yourByte & MASKS[imageIndex]) != 0;