2015-03-31 23 views
2

我有一个小问题。 我有一个具有RGB值的像素的BufferedImage。 此代码用于从de R,G,B,A值创建RGB值。在java中更改bufferedImage像素

private int getRGB(int r, int g, int b, int a){ 
    return (a << 24) | (r << 16) | (g << 8) | b; 
} 

第一个问题是,如何获得的R,G,B,从像素A的值,这是因为像素RGB将返回由代码生成上述数。

如果我有这些值,我可以把2个像素放在另一个上面,这样它就可以计算出新的值,还是我必须通过手动来做到这一点? 使用自动计算功能,您可以将Java 2D放在最上面的2个运输工具上,它将合并颜色。

非常感谢。

+0

对于问题的第二部分,请参阅[Alpha合成](http://en.wikipedia.org/wiki/Alpha_compositing)。但是,如果您只能使用Java 2D,那将使生活更轻松,因为它已经实现了Porter/Duff alpha合成(请参阅'Graphics2D'和'AlphaComposite'类)。 – haraldK 2015-03-31 17:46:17

回答

2

第一个问题是,如何从像素中获取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; 

如果我有这些价值观,我可以把2个像素在彼此的顶部,这样就计算出新的价值还是我通过手动来做到这一点?通过自动计算,您可以将Java 2D放在最上面的2个运输工具上,它将合并颜色。

由于您需要决定如何合成颜色,因此您需要手动执行此操作(或调用每像素的实用程序方法)。你可以使用最大值,总和,平均值等像素值。

+2

当然,程序员必须决定如何完成组合,但一旦做出决定,就会有一个名为AWT/Java2D的丰富API,可以[用于](http://docs.oracle.com/ javase/7/docs/api/java/awt/AlphaComposite.html)[任务](http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html#setComposite(java .awt.Composite)); ['BufferedImage.createGraphics()'](http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#createGraphics())使它成为可能。除非我们知道OP为什么说“你能想到Java 2D”,而不是仅仅使用Java 2D ...... – Holger 2015-03-31 11:14:00

相关问题