我試圖將Robot.createScreenCapture函數生成的RGB圖像轉換爲ARGB圖像。我的目標是在兩個圖像之間的像素沒有改變時設置透明度,但是我得到黑色。如下圖所示。如何將BufferedImage(RGB)轉換爲BufferedImage(ARGB或RGBA)?
例如BufferedImage,作爲創建如下:
BufferedImage currImage = robot.createScreenCapture(new Rectangle(x, y, width,height));
下面的函數意圖創造ARGB像素。
private BufferedImage bufferedImagesEqual(BufferedImage prevImage,
BufferedImage currImage) {
boolean changed = false;
BufferedImage imagePart = new BufferedImage(currImage.getWidth(), currImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
if (prevImage.getWidth() == currImage.getWidth()
&& prevImage.getHeight() == currImage.getHeight()) {
for (int x = 0; x < currImage.getWidth(); x++) {
for (int y = 0; y < prevImage.getHeight(); y++) {
int argb = currImage.getRGB(x, y);
if (prevImage.getRGB(x, y) != currImage.getRGB(x, y)){
// return false;
// currImage.setRGB(x, y, 0);
if(!changed){
changed = true;
}
}
else {
imagePart.setRGB(x, y, 0xff000000);
}
}
}
} else {
return imagePart;
}
if(changed){
return imagePart;
}else {
return null;
}
}
前後setRGB調用後,這說明什麼回報? Color pixel = new Color(imagePart.getRGB(x,y),true); pixel.getAlpha() – Dylan 2014-10-20 02:22:36
嘗試使用'new Color(0,0,0,0).getRGB()'而不是'0xff000000',因爲它消除了歧義 – MadProgrammer 2014-10-20 02:38:35
0xff000000是不透明的黑色......你想要的是'0x0'(或者如果你想詳細說明,則爲'0x00000000'),這是100%透明的黑色(或者,而不是0不透明的黑色)。或者如@MadProgrammer所說,如果有疑問的話。 ;-) – haraldK 2014-10-20 10:41:24