Я думаю, это должно быть либо int pixelPosition = j*a.width + i;
, либо int pixelPosition = i*a.height + j;
Предположим, ваше изображение 100х10, что означает, что в нем 1000 элементов.Если вы смотрите на элемент (50,5), то i = 50 и j = 5, исходный код говорит pixelPosition = i*a.width + j;
, что означает pixelPosition = 50 * 100 + 5 = 5005, что находится за пределами диапазона.Если вы посмотрите на свой код, вы всегда используете (i +/- 1) * width + (j +/- 1), поэтому все будет в порядке для строк, где я меньше высоты, но все остальное будет внеrange.
Следующая проблема - усреднение красного, зеленого и синего.Вам следует либо преобразовать в серый, либо в другую переменную цветового пространства, а не объединять цвета.
Следующая проблема - ошибка округления.Каждая сумма будет усечена, когда значения RGB малы.Используйте тип с плавающей запятой, а затем приведите его на последнем шаге.
Следующая проблема находится в последней строке:
aBlur.pixels[pixelPosition] = a.pixels[pixelPosition] + color(total);
aBlur похоже на размытие в оттенках серого.входного изображения, но я не знаю, как устанавливается цветовое пространство, давайте предположим, что это RGB.Вы копируете исходный пиксель и добавляете в цветную версию размытия?
Предположим, исходный пиксель равен (150,150,150), а усредненное значение, которое вы получаете, равно 170. Если функция color (170) составляет пиксель (170,170,170)) тогда сумма оригинала и среднего будет (320 320 320).Так что теперь значение пикселя далеко от размытой версии оригинала.
Я подозреваю, что эта строка должна быть
aBlur.pixels[pixelPosition] = color(total);