gpt4 book ai didi

Java - 循环到平均 rgb 值应该会破坏事物....但不是

转载 作者:行者123 更新时间:2023-11-30 10:08:27 24 4
gpt4 key购买 nike

所以我有一个学校项目,我们必须使用我们教授给我们的几个类(class),并制作我们自己的图像管理器。

第一部分包括制作一组静态方法来将图像本身编辑为彩色数组的二维数组(ColorImage 类型)。

第一个问题是制作一个工具将图像缩小 f 倍(原始像素的 f 边正方形在输出中变为 1 个像素),我的作品有效,但我认为它不应该而且我无法弄清楚为什么它会起作用,因此我们将不胜感激。具体来说,我正在考虑对缓冲区数组 (avgArr[][]) 中每个位置的颜色进行平均的循环(第 16 行)。我在想:每次迭代都会覆盖红色、蓝色和绿色的值,而 avgColor 只会获得最后一个像素的值,它从 avgArr 中获得 rgb 值。

    static ColorImage downscaleImg(ColorImage img, int f) {

ColorImage dsi = new ColorImage(img.getWidth()/f, img.getHeight()/f);
Color[][] avgArr = new Color[f][f];
int reds = 0;
int greens = 0;
int blues = 0;

for(int i = 0; i < dsi.getWidth(); i++) {
for(int j = 0; j < dsi.getHeight(); j++) {
for(int x = i*f, xc = 0; x < i*f + (f-1); x++, xc++){
for(int y = j*f, yc = 0; y < j*f + (f-1); y++, yc++) {
avgArr[xc][yc] = img.getColor(x, y);
}
}
for(int k = 0; k < f - 1; k++){
for(int w = 0; w < f - 1; w++) {
reds += avgArr[k][w].getR();
greens += avgArr[k][w].getG();
blues += avgArr[k][w].getB();
}
}
int count = f*f;
Color avgColor = new Color(reds/count, greens/count, blues/count);
dsi.setColor(i, j, avgColor);
reds = 0;
greens = 0;
blues = 0;
}
}
return dsi;
}

谢谢,

编辑:事实证明,它实际上只是采用了它查看的 avgArr 的最后位置的颜色。欢迎提出任何更正建议。

最佳答案

我认为您可以通过求和红色/绿色/蓝色然后将它们除以最后的总像素以求出平均值来解决您的问题:

int reds = 0;
int greens = 0;
int blues = 0;

...

for(int k = 0; k < f - 1; k++){
for(int w = 0; w < f - 1; w++) {
reds += avgArr[k][w].getR(); // <-- note the +=
greens += avgArr[k][w].getG();
blues += avgArr[k][w].getB();
}
}

int count = (f-1)*(f-1);
Color avgColor = new Color(reds/count, greens/count, blues/count);

关于Java - 循环到平均 rgb 值应该会破坏事物....但不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53748107/

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