Как передать двумерный массив в функцию с неизвестным размером в C? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь прочитать изображение в 2D-массив, а затем внести изменения в его значения RGB и затем создать функцию изменения размера.Размеры изображения неизвестны, пока изображение не загружено, поэтому оно выглядит примерно так:

Я попытался передать "пиксели" в беззнаковый символ ** и пиксели [0] [0]на unsigned char * и еще несколько других способов, которые я не могу вспомнить.Я искал в Интернете различные методы, но ни один из них, похоже, не работает.Я видел, что если вы определяете размер одного из массивов как пиксели [] [40], это работает, но я не знаю размер до тех пор, пока изображение не будет загружено.

void invertImg(unsigned char **img, int height, int width)
{
    int h, w;
    for (h = 0; h < height; h++){
        for (w = 0; w < width * 3; w += 3){
            //Blue
            img[h][w] = ~img[h][w];
            //Green
            img[h][w + 1] = ~img[h][w + 1];
            //Red
            img[h][w + 2] = ~img[h][w + 2];
        }
    }
}

    // Get Image name and desired dimensions

    char header[54];
    unsigned char pixels[height][width * 3];

    FILE *in = fopen(img, "rb");
    FILE *out = fopen("out.bmp", "wb");

    fread(header, 1, 54, in);
    fread(pixels, 1, height * width * 3, in);


//function that the 2d array needs to be passed into
invertImg(pixels, height, width);


    fwrite(header, sizeof(char), HEADER_SIZE, out);
    fwrite(pixels, sizeof(char), height * width * 3, out);

    fclose(in);
    fclose(out);

Как я могу получить этот массив без знака в функцию, чтобы иметь возможность изменять его значения?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете передать многомерный массив с размерами, основанными на других параметрах:

void invertImg(int height, int width, unsigned char img[height][width])
{
    ...

Объявление для этой функции без имен параметров будет выглядеть так:

void invertImg(int, int, unsigned char img[*][*]);

Тогда вы можетевызовите функцию так:

invertImg(height, width, pixels);
0 голосов
/ 07 февраля 2019
void invertImg(unsigned char *img, int height, int width)
{
    int h, w;
    for (h = 0; h < height; h++){
        for (w = 0; w < width; w++){
            for (color = 0; color < 3, ++color) {
                img[ 3*width*h + 3*w + color] = ~img[ 3*width*h + 3*w + color]
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...