2016-12-20 3 views
1

У меня есть вопрос о Rasters в BufferedImage. У меня есть байтовый массив данных изображения, и я хочу установить данные байта в качестве новых данных изображения. Я уже видел путь способ сделать это, на фото ниже:Установить растровые данные с байт-массивом

BufferedImage bImageFromConvert = new BufferedImage(dimWidth, dimHeight, BufferedImage.TYPE_BYTE_GRAY); 
    byte[] bufferHolder = ((DataBufferByte) bImageFromConvert.getRaster().getDataBuffer()).getData(); 
    System.arraycopy(imageInByte, 0, bufferHolder, 0, bufferHolder.length);//imageInByte is my byte array 
    ImageIO.write(bImageFromConvert, "bmp", new File(
       directory + fileName + "_Compressed.bmp")); 

Однако при записи данных в формате BMP, конечный результат не то, что ожидалось. Я несколько дней стучал головой по этому проекту, и я хочу посмотреть, могу ли я поместить байтовые данные прямо в Растр, чтобы понять, не изменилось ли это. Прошу прощения, если этот вопрос немного запутан, мой мозг немного обжарен с часов кодирования. Пожалуйста, дайте мне знать, если я могу сделать это более ясным.

Спасибо!

EDIT: Вывод изображения clilck

EDIT2: Примечание стороны, кто-нибудь знает, почему байты, кажется, повторяет, как, что в выходном изображении? Код, который разделяет верхние и нижние разряды, похоже, не дублирует ничего.

+0

Каковы результаты, которые вы получаете, это не то, что вы ожидали? – CraigR8806

+0

Вы пытаетесь применить массив байтов 'imageInByte' к' bImageFromConvert'? – CraigR8806

+0

@ CraigR8806 Я пишу уложенные изображения байтовых данных на изображение, и предполагаемый результат состоит в том, чтобы верхние байты отображались в верхней части изображения как действительно «яркое» мини-изображение, а нижние байты внизу как темный мини-образ. Прямо сейчас это похоже на то, что изображения с высоким байтом и низким байтом повторяются дважды. Мне интересно, если это из-за нескольких цветных каналов? Но я был уверен, что TYPE_BYTE_GRAY дал мне неподписанное 8-битное изображение в оттенках серого. Я очень смущен, почему это повторяется. Я приложу свой вывод изображения, чтобы вы могли видеть, что я имею в виду. – Sarah

ответ

1

Что вы сделали, чтобы скопировать массив байтов в изображение с помощью DataBufferByte - это самый быстрый и безопасный способ сделать это. Я делаю то же самое и прекрасно работает.

Следовательно, если результат не то, что вы ожидаете, то есть только две возможности:

  1. данные, которые вы скопировать в DataBuffer не то, что вы, что они
  2. есть проблема, когда вы пишете изображение.

Если вы хотите использовать растр вместо DataBuffer, вы можете сделать следующее.

for (int y=0, pos=0 ; y < dimHeight ; y++) 
    for (int x=0 ; x < dimWidth ; x++) 
     bImageFromConvert.getRaster().setSample(x, y, O, imageInByte[pos] & 0xFF) ; 

Но это должен быть точно такой же результат того, что вы делали раньше. Растр просто управляет кодировкой en BufferedImage. Поэтому я думаю, что у вас есть проблема в другом месте (см. Два момента, которые я привел).

Смежные вопросы