我有一個BufferedImage i
,我想從那image
一定像素包括阿爾法值得到Color。像素是使用x
和y
座標值確定。bufferedImage.getRGB(X,Y)不會產生阿爾法
這裏是我的嘗試:
Color c = new Color(i.getRGB(x, y));
出於某種原因,新的顏色對象包含了正確的RGB但阿爾法丟失。
我在做什麼錯?
在此先感謝
我有一個BufferedImage i
,我想從那image
一定像素包括阿爾法值得到Color。像素是使用x
和y
座標值確定。bufferedImage.getRGB(X,Y)不會產生阿爾法
這裏是我的嘗試:
Color c = new Color(i.getRGB(x, y));
出於某種原因,新的顏色對象包含了正確的RGB但阿爾法丟失。
我在做什麼錯?
在此先感謝
單參數的構造函數Color
你使用丟棄alpha信息。使用兩參數版本而不是和在true
通作hasalpha
:
Color c = new Color(i.getRGB(x, y), true);
相關Javadoc:
Color(int rgb)
創建一種不透明的sRGB顏色與由所述指定的組合後的RGB值紅色成分在16-23位,8-15位表示綠色分量,0-7位表示藍色分量。
Color(int rgba, boolean hasalpha)
創建具有在24-31位,16-23位表示紅色分量,8-15位表示綠色分量,並且由阿爾法分量的指定的組合RGBA值的sRGB顏色位0-7中的藍色分量。
完美的作品,謝謝! – Rapti
很好的解釋! –
阿爾法不會丟失。
您必須使用接受像素信息的(int,boolean)構造函數,並指定它是否具有帶有布爾值或帶有4個值(紅色,綠色,藍色和Alpha的構造函數的alpha值。
的(INT,INT,INT,int)構造信息要縮短代碼,你可以隨時與 Color color = new Color(i.getRGB(x, y), true);
告訴顏色構造的像素信息不替換所有下面的代碼包含Alpha值。
的(INT,布爾)構造從JavaDoc
注意,有時獲取阿爾法的信息時,按以下方式可能會返回-1,在這種情況下,這意味着它返回到255,所以你必須執行256 1來獲得實際的alpha值。這段代碼演示瞭如何加載圖像,並獲得一定的座標是圖像的顏色,在這種情況下,0,0。下面的例子可以告訴你如何檢索每個顏色值,包括α,並重建一個新的色彩。
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.
這意味着阿爾法值也被檢索。
我不是很確定這個類是如何工作的,但是你使用的是一個名爲'getRGB'的函數,然後你驚訝它只能得到RGB? – murgatroid99
是的,這是真的,但我以前檢查過像素是否包含使用getRGB()方法的任何alpha值。 http://stackoverflow.com/questions/10419838/how-can-i-find-out-where-a-bufferedimage-has-alpha-in-java – Rapti
我明白了。 「阿爾法迷失」是什麼意思? – murgatroid99