16 бит (565) считывание изображения - PullRequest
3 голосов
/ 18 апреля 2011

Я читаю массив байтов изображения, теперь изображение 16-битное (r: 5, g: 6, b: 5), и я хотел бы прочитать его в BufferedImage.

Я пробовал что-то вроде:


int[] nBits = {5, 6, 5};
int[] bOffs = {0, 0, 0};
ColorModel colorModel = new ComponentColorModel(
        cs, nBits, false, false,
        Transparency.OPAQUE,
        DataBuffer.TYPE_BYTE);
WritableRaster raster = Raster.createInterleavedRaster(
        new DataBufferByte(screenBuffer,screenBuffer.length),
        foundWidth, foundHight,
        foundWidth * 2, 2,bOffs, null);

BufferedImage imgReconstructed = new BufferedImage(
        colorModel,raster,false,null);


Моя проблема связана с bandOffsets, как мне установить его для 16-битного изображения. Это правильный путь? Спасибо, Guy

1 Ответ

1 голос
/ 18 апреля 2011

Метод createInterleavedRaster будет использоваться для создания изображения с образцом модели, где каждый элемент данных содержит информацию о цвете для одной полосы (т. Е. Красного, зеленого или синего).Если вам нужно изображение, в котором каждый 16-битный элемент данных содержит все 3 цветовые полосы, вы должны использовать вместо этого один из методов createPackedRaster.

Поддерживается только шестнадцатитовый тип данныхпо этим моделям не имеет знака unsigned short, поэтому вы захотите передать экземпляр DataBufferUShort.

В настоящее время у меня нет доступа к компилятору, чтобы собрать для вас пример рабочего кода, но SinglePixelPackedSampleModel Документация по API поможет немного объяснить параметры scanlineStride и маски полосы.При необходимости я позже обновлю этот ответ с более подробной информацией.

...