Эффективное хранение двоичных данных изображения - PullRequest
0 голосов
/ 30 марта 2011

Я хочу хранить большое количество одинаковых по размеру больших бинарных трехмерных изображений на Java.Мой текущий мыслительный процесс состоит в том, чтобы хранить информацию в каждом бите байта [].Поэтому в пространстве одного изображения я мог бы эффективно хранить 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;
}

В настоящее время они работают нормально, но они слишком медленные,Есть ли способ ускорить это?Например, просто получить n-й бит каждого элемента в byte [] без итерации по байту []?В идеале я хотел бы получить это так же быстро, как поиск в HashMap (что я сейчас и использую).

PS Если есть другой способ эффективно хранить и быстро получать / устанавливать набордвоичные изображения, я все уши.

1 Ответ

1 голос
/ 30 марта 2011

есть что-то вроде этого:

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

тогда

int imageIndex;
boolean colorSet = (yourByte & MASKS[imageIndex]) != 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...