我正在使用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值的新Color尝试了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)]);
也行不通。我很无能为力!
答案 0 :(得分:0)
序列应为:
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)]);