我正在使用BufferedImages,尤其是使用setRGB。我所做的就是获取确切的RGBA字节值,然后将其重新应用到图像上,以查看它们是否起作用,并且图像以某种方式被破坏。我做错什么了?
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
这似乎是正确的做法。但是,当我打印图像时,该小节现在看起来完全不同,即使它不应该更改也是如此。任何帮助将不胜感激!我也尝试过使用具有rgba值的新颜色的setRGB,但这也没有用。在做
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)]);
也行不通。我很笨!
最佳答案
顺序应为:
pixLength
)pixLength + 1
)pixLength + 2
)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)]);