我在哪里可以找到JavaFX API中的getArgb函数声明?

时间:2015-02-27 21:48:16

标签: java api javafx

在哪里可以找到JavaFX API中的getArgb函数定义? (包com.sun.javafx.tk(PlatformImage))

1 个答案:

答案 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;
}