2016-02-07 4 views
0

Я работал с BufferedImages, особенно с помощью setRGB. То, что я сделал, это взять точные значения байт RGBA и повторно применить их по изображению, чтобы увидеть, работают ли они, и изображение каким-то образом искалечено. Что я сделал не так?setRGB с BufferedImage обеспечивает неправильную окраску

BufferedImage subImg = inputImage.getSubimage(20,20,200,300); 
byte[] pixels = ((DataBufferByte) subImg.getRaster().getDataBuffer()).getData(); 
int pixLength=0; 
if(subImg.getAlphaRaster()!=null){ 
     for(int y=0; y<subImg.getHeight(); y++){ 
        for(int x=0; x<subImg.getWidth(); x++){ 
          inputImage.setRGB(20+x, 20+y,pixels[pixLength+3]<<24 + pixels[pixLength+2]<<16 + pixels[pixLength+1]<<8+pixels[pixLength]); 
          pixLength+=4; 
        } 
     } 
} 

Основы этого поста: Java - get pixel array from image

это казалось правильным, что нужно сделать. Однако, когда я печатаю изображение, подраздел теперь выглядит совершенно другим, даже если он не должен был меняться. Любая помощь будет принята с благодарностью! Я также попробовал setRGB, используя новый цвет с значениями rgba, но это также не сработало. Производство

inputImage.setRGB(20+x, 20+y,((int)pixels[pixLength+3]&0xff)<<24 + ((int)pixels[pixLength+2]&0xff)<<16 + ((int)pixels[pixLength+1]&0xff)<<8+((int)pixels[pixLength]&0xff)]); 

также не работает. Я совершенно не знаю!

ответ

0

Последовательность должна быть:

  1. альфа (pixLength)
  2. голубой (pixLength + 1)
  3. зеленый (pixLength + 2)
  4. красный (pixLength + 3)

Кроме того, addition precedents shift; таким образом, вы должны изменить setRGB на:

inputImage.setRGB(20 + x, 20 + y, (((int)pixels[pixLength] & 0xff) << 24) + ((int)pixels[pixLength + 1] & 0xff) + (((int)pixels[pixLength + 2] & 0xff) << 8) + (((int)pixels[pixLength + 3] & 0xff) << 16)]); 
+0

Я пробовал это, но все, что происходит, - это весь подраздел становится прозрачным. Не знаете, почему –

+0

Вы добавили дополнительную скобку между каждым добавлением? –

+0

Да. Просто попробовал это. –

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

  • Нет связанных вопросов^_^