2 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
我認為,您的“int unpacking”代碼可能是錯誤的。
我使用了(pixel >> 24) & 0xff(pixel特定像素的 rgba 值在哪里)并且效果很好。
我將其與 的結果進行了比較,結果顯示java.awt.Color效果很好。
我直接從 中“竊取”了“提取”代碼java.awt.Color,這是另一個原因,我傾向于不以這種方式執(zhí)行這些操作,很容易把它們搞砸
還有我很棒的測試代碼...
BufferedImage image = ImageIO.read(new File("BYO image"));
int width = image.getWidth();
int height = image.getHeight();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int pixel = image.getRGB(x, y);
//value = 0xff000000 | rgba;
int a = (pixel >> 24) & 0xff;
Color color = new Color(pixel, true);
System.out.println(x + "x" + y + " = " + color.getAlpha() + "; " + a);
}
}
注意:在有人說這是低效之前,我不是為了效率,我是為了快速寫作
您可能還想看看如何在 Java 中將 get.rgb(x,y) 整數(shù)像素轉換為 Color(r,g,b,a)?,我也用它來驗證我的結果

TA貢獻1820條經(jīng)驗 獲得超10個贊
我認為問題在于您使用的是算術移位 ( >>
) 而不是邏輯移位 ( >>>
)。因此0xff000000 >> 24
變成0xffffffff
(即-1
)
添加回答
舉報