ошибка: 8.13802e + 06 выходит за пределы диапазона представимых значений типа 'unsigned char' - PullRequest
0 голосов
/ 07 мая 2020

близко к финишу sh Я столкнулся с проблемой, которую не могу решить. Может быть, один из вас сможет:

Компиляция следующего кода работает нормально, но когда я запускаю программу, я получаю следующее сообщение об ошибке:

помощники. c: 228: 42: ошибка выполнения : 8.13802e + 06 находится за пределами диапазона представимых значений типа 'unsigned char'

Код представляет собой функцию для поблочного размытия изображения, но самый первый пиксель [0] [0] не получает правильное среднее значение, и я не знаю, почему я получаю это сообщение об ошибке.

    // Blur image
    void blur(int height, int width, RGBTRIPLE image[height][width])
    {
        int i;
        int j;
        int m;
        int n;
        int averageRed;
        int averageBlue;
        int averageGreen;
        RGBTRIPLE average[height][width];




// For each row of the image...
    for (i = 0; i < height; i++)
    {
        //...take each pixel.
        for (j = 0; j < width; j++)


                //If current height equals 0 AND current width equals 0..   
                if (i == 0 && j == 0)
                {   
                    //..take 2 rows of the picture..
                    for (m = i; m <= i + 1; m++)
                    {   
                        //..and take 2 pixels of each row.
                        for (n = j; n <= j + 1; n++)
                        {
                        //Sum up the rgb-values for each of the 2 pixel of the 2 rows.
                        averageRed = averageRed + image[m][n].rgbtRed;
                        averageGreen = averageGreen + image[m][n].rgbtGreen;                                        
   -> The error line averageBlue = averageBlue + image[m][n].rgbtBlue;
                        }
                    }
                    //Save the average of the values in a separate array after the 2x2 pixel-block
                    average[i][j].rgbtRed = round((float)averageRed / 4);
                    average[i][j].rgbtGreen = round((float)averageGreen / 4);
                    average[i][j].rgbtBlue = round((float)averageBlue / 4);

                    //Set average-variables to 0
                    averageRed = 0;
                    averageGreen = 0;
                    averageBlue = 0;
                }


        //From each row of the image...
        for (i = 0; i < height; i++)
        {
            //...take each pixel..
            for (j = 0; j < width; j++)
            {
                //...and update the original value with the temporary stored value.
                image[i][j].rgbtRed = average[i][j].rgbtRed;
                image[i][j].rgbtGreen = average[i][j].rgbtGreen;
                image[i][j].rgbtBlue = average[i][j].rgbtBlue;
            }
        }

    }

Заранее благодарим за подсказку!

1 Ответ

0 голосов
/ 07 мая 2020

Еще один фейспалм-ответ: -) ..

Решение оказалось довольно простым. Это просто отсутствующая инициализация переменных averageRed / Green / Blue.

Не получил, потому что сообщение об ошибке указывало только на averageBlue.

Еще раз спасибо M Oehm: - )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...