gpt4 book ai didi

java - 为什么 Java 会错误地保存 alpha 值较低的像素颜色以及如何防止这种情况发生?

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:54 24 4
gpt4 key购买 nike

主要使用JavaFX,我尝试获取现有图像并将其转换为单色,但深色更不透明,浅色更透明。
简而言之,对于每个像素,我将 R、G、B 值相加,除以 3,再用 255 减去该值,然后将其设置为 Alpha。 R、G、B 值是恒定的,在我的示例中它们是 54、57、62。
我不太确定问题发生在哪里,但是查看输出,不透明(深色)像素的颜色是正确的,并且 alpha 下降越低,颜色就越少。

Examples:
54, 58, 63 for Alpha = 57
52, 60, 60 for Alpha = 34
36, 73, 73 for Alpha = 7

 

WritableImage out = new WritableImage(width, height);
PixelWriter setPixel = out.getPixelWriter();
PixelFormat<IntBuffer> pixelFormat = PixelFormat.getIntArgbInstance();
PixelReader getPixel = in.getPixelReader();

int[][] imageData = new int[height][width];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
imageData[y][x] = getPixel.getArgb(x, y);
}
}
int[][][] inRgba = Tools.intToRgba(imageData, width, height);

System.out.println("Enter the R, G, B components of the output, in order.");
int outR = input.nextInt();
int outG = input.nextInt();
int outB = input.nextInt();
input.nextLine(); //To clear the newline.

int[][][] outRgba = new int[height][width][4];

for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
outRgba[y][x] = new int[] {outR, outG, outB, 255 - (int) Math.round((inRgba[y][x][0] + inRgba[y][x][1] + inRgba[y][x][2]) / 3.0)};
}

int[] outputBuffer = Tools.rgbaToInt(outRgba, width, height);
setPixel.setPixels(0, 0, width, height, pixelFormat, outputBuffer, 0, width);

File file = Files.createFile(Paths.get(path2)).toFile();
ImageIO.write(SwingFXUtils.fromFXImage(out, null), "png", file);

 

public static int[] rgbaToInt(int[][][] image, int width, int height) {
int[] intBuffer = new int[height * width];

for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
intBuffer[y * width + x] = (image[y][x][3] << 24) | (image[y][x][0] << 16 ) | (image[y][x][1] << 8) | image[y][x][2];
}
}

return intBuffer;
}

我的脚本的(希望)相关部分。

最佳答案

我认为您已经接近您想要实现的目标了。但您不应保留原始颜色,而应将 R、G 和 B 设置为 (255, 255, 255) 加上计算出的 alpha。

关于java - 为什么 Java 会错误地保存 alpha 值较低的像素颜色以及如何防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com