Итак, у меня есть школьный проект, и мы должны поработать с парой классов, которые дал нам наш профессор, и создать свои собственные, чтобы сделать органайзер изображений.
Первая часть состоит из создания набора статических изображений.методы для редактирования самих изображений в виде двумерных массивов цветовых массивов (тип ColorImage).
Первая первая проблема заключается в создании инструмента для уменьшения масштаба изображения с коэффициентом f (f-сторонний квадрат пикселей в оригинале становится1 пиксель на выходе), и мой работает, но я думаю, что это не должно, и я не могу понять, почему это работает, поэтому любая помощь приветствуется.В частности, я рассматриваю цикл, который усредняет цвета каждой позиции в массиве буферов (avgArr [] []) (строка 16).Я думаю: значение красного, синего и зеленого будет просто перезаписываться для каждой итерации, а avgColor просто получит значение последнего пикселя, в котором он получил значения rgb от avgArr.
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, на которую он смотрел.Любые предложения по исправлению приветствуются.