Alpha 没有丢失。
您必须使用 (int,boolean) 构造函数来获取像素信息并使用布尔值指定它是否具有 alpha 值,或者使用具有 4 个值 Red、Green、Blue 和 Alpha 的构造函数。
来自JavaDoc的(int,int,int,int)构造函数信息
为了缩短代码,您可以随时将以下所有代码替换为
Color color = new Color(i.getRGB(x, y), true);
它告诉颜色构造器像素信息确实包含 Alpha 值。
JavaDoc 中的 (int,boolean) 构造函数信息
请注意,有时在检索 alpha 时,以下方式可能会返回 -1,在这种情况下,这意味着它会循环回 255,因此您必须执行 256-1 才能获得实际的 alpha 值。这个 sn-p 演示了如何加载图像并在特定坐标上获取该图像的颜色,在本例中为 0,0。以下示例可以向您展示如何检索包括 alpha 在内的每个颜色值,并将其重建为新颜色。
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
public class main {
public static void main(String [] args){
BufferedImage image = null;
try {
image = ImageIO.read(new URL("image.png"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
int pixel = image.getRGB(0, 0);
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel >> 0) & 0xff;
Color color1 = new Color(red, green, blue, alpha);
//Or use
Color color2 = new Color(image .getRGB(0, 0), true);
}
}
BufferedImages getRGB(int,int) JavaDoc 如你所见:
Returns an integer pixel in the default RGB color model (TYPE_INT_ARGB) and default sRGB colorspace. Color conversion takes place if this default model does not match the image ColorModel. There are only 8-bits of precision for each color component in the returned data when using this method.
这意味着 Alpha 值也被检索。