gpt4 book ai didi

java - 带有 BufferedImage 的 setRGB 提供不正确的着色

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:30 24 4
gpt4 key购买 nike

我一直在使用 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)]);

也不行。我真是一头雾水!

最佳答案

顺序应该是:

  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)]);

关于java - 带有 BufferedImage 的 setRGB 提供不正确的着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com