在哪里可以找到JavaFX API中的getArgb函数定义? (包com.sun.javafx.tk(PlatformImage))
答案 0 :(得分:0)
如果您正在寻找接口com.sun.javafx.tk.PlatformImage
,这是用于存储javafx.image.Image
对象的图像数据的所有工具包特定对象的通用接口,您可以在OpenJFX {{3}上找到它。 }。
在那里你可以看到getArgb()
函数声明:
/**
* @param x X coordinate of pixel
* @param y Y coordinate of pixel
* @return the non-premultiplied pixel in integer ARGB component ordering.
*/
public int getArgb(int x, int y);
公共API javafx.scene.image.Image
实现了一个javafx.scene.image.PixelReader
,这是一个界面,用于定义从图像中检索像素数据的方法,提供该界面中的所有方法:
new PixelReader() {
@Override
public int getArgb(int x, int y) {
PlatformImage pimg = platformImage.get();
return pimg.getArgb(x, y);
}
}
图像对象具有基础平台表示:
private ObjectPropertyImpl<PlatformImage> platformImage;
要找到我一直在调试的实现:
image.getPixelReader().getArgb(0, 0);
这会导致com.sum.prism.Image.getArgb()
:
@Override
public int getArgb(int x, int y) {
return getPixelAccessor().getArgb(x, y);
}
和内部课程BaseAccesor
:
@Override
public int getArgb(int x, int y) {
return getGetter().getArgb(getBuffer(), getIndex(x, y));
}
最终导致com.sun.javafx.image.impl.ByteBgraPre
:
@Override
public int getArgb(ByteBuffer buffer, int offset) {
return PixelUtils.PretoNonPre(getArgbPre(buffer, offset));
}
,其中
@Override
public int getArgbPre(ByteBuffer buffer, int offset) {
return (((buffer.get(offset ) & 0xff) ) |
((buffer.get(offset + 1) & 0xff) << 8) |
((buffer.get(offset + 2) & 0xff) << 16) |
((buffer.get(offset + 3) ) << 24));
}
和com.sun.javafx.image.PixelUtils
:
public static int PretoNonPre(int pre) {
int a = pre >>> 24;
if (a == 0xff || a == 0x00) return pre;
int r = (pre >> 16) & 0xff;
int g = (pre >> 8) & 0xff;
int b = (pre ) & 0xff;
int halfa = a >> 1;
r = (r >= a) ? 0xff : (r * 0xff + halfa) / a;
g = (g >= a) ? 0xff : (g * 0xff + halfa) / a;
b = (b >= a) ? 0xff : (b * 0xff + halfa) / a;
return (a << 24) | (r << 16) | (g << 8) | b;
}