Предполагается, что эта функция пиксель за пикселем размывает изображение, изменяя цвет каждого пикселя на среднее значение цветов вокруг него в «радиусе» 2n+1.
(Та часть, где происходит переход к следующему пикселю, уже реализована, не волнуйтесь).
Я успешно скомпилировал этот код:
void
blur_pixels(image *img, pixel *p, size_t i, size_t j)
{
//i = current height of pixel, j = current width of pixel
int side = 2*blurRate+1;
int total = 0;
int leftRight = i-blurRate;
int upDown = j-blurRate;
int tmpHr = 0, tmpHg = 0, tmpHb = 0;
for(; upDown < j+blurRate; upDown++) {
if(upDown >= 0 && upDown < img->height) {
for(; leftRight < i+blurRate; leftRight++) {
if(leftRight >= 0 && leftRight < img->width) {
tmpHr += (p+leftRight)->r;
tmpHg += (p+leftRight)->g;
tmpHb += (p+leftRight)->b;
total++;
}
}
}
}
p->r=tmpHr/total;
p->g=tmpHg/total;
p->b=tmpHb/total;
}
Но когда я запускаю код, я получаю следующее исключение:
Floating point exception
Кто-нибудь знает, почему?
total
это ›0 после цикла? - person tkausl   schedule 08.05.2017upDown
для настройки указателя пикселя, поэтому вы всегда будете читать одну и ту же строку (строку 0) изображения. Однако это не имеет отношения к вашей ошибке. (Кроме того, я не понимаю использования глобального вместо передачиblurRate
в качестве параметра.) - person rici   schedule 08.05.2017