在java中更改BuffereImage像素
我有个小问题。 我有一个BuffereImage,它有一个RGB值的像素。 此代码用于根据de R、G、B、A值创建RGB值在java中更改BuffereImage像素,java,image,java-8,bufferedimage,bitwise-operators,Java,Image,Java 8,Bufferedimage,Bitwise Operators,我有个小问题。 我有一个BuffereImage,它有一个RGB值的像素。 此代码用于根据de R、G、B、A值创建RGB值 private int getRGB(int r, int g, int b, int a){ return (a << 24) | (r << 16) | (g << 8) | b; } private int getRGB(int r,int g,int b,int a){ 返回(a) 第一个问题是,如何从像素中获取R、G
private int getRGB(int r, int g, int b, int a){
return (a << 24) | (r << 16) | (g << 8) | b;
}
private int getRGB(int r,int g,int b,int a){
返回(a)
第一个问题是,如何从像素中获取R、G、B、A值,因为像素RGB将返回由上述代码生成的数字
您可以按如下方式反转此过程:
int a = (argb >> 24) & 0xFF;
int r = (argb >> 16) & 0xFF;
int g = (argb >> 8) & 0xFF;
int b = (argb >> 0) & 0xFF;
如果我有这些值,我可以把两个像素放在彼此的上面,这样它就可以计算新的值,还是我必须手动计算呢?通过自动计算,你可以想到Java 2D,当你把两个传输对象放在上面时,它会合并颜色
您需要手动执行此操作(或调用每像素的实用方法),因为您需要决定如何合成颜色,例如,您可以使用最大值、总和、平均值等像素值。当然,程序员必须决定如何合成,但一旦做出决定,有一个丰富的API称为AWT/Java2D,它可以;使之成为可能。除非我们了解OP为什么说“您可以考虑Java 2D”而不是仅仅使用Java 2D…对于问题的第二部分,请参见。但是,如果您可以仅使用Java 2D,则会使生活更轻松,因为它已经实现了Porter/Duff alpha合成(请参见Graphics2D
和AlphaComposite
类)。