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

Where can i find getArgb function declaration in JavaFX API?

我在哪里可以找到 JavaFX 中的 getArgb 函数定义 API? (包 [=​​13=] (PlatformImage))

如果您正在寻找接口 com.sun.javafx.tk.PlatformImage,一个用于存储 javafx.image.Image 对象的图像数据的所有工具包特定对象的通用接口,您可以在 OpenJFX repository.

在那里你可以看到 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);

Public 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);
}

和内部 class 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;
}