Использование массива int в качестве входных данных для const unsigned char * - PullRequest
0 голосов
/ 04 марта 2019

Таким образом, мой код работал нормально, когда я имел эту функцию, создавая PNG в оттенках серого из массива short, содержащего все значения пикселей.Функция отлично работала ...

Я не лучший в Си, поэтому предупреждаю, возможно, о странном коде:

void exportPNG(const char* filename, short image[], int npixels, int w, int h){
    int i = 0;
    char file_out[npixels];

    while (i < npixels){
        file_out[i] = (char)image[i];
        i++;
    }

    lodepng_encode_file(filename, file_out, w, h, LCT_GREY, 8); // function from lodepng for encoding/decoding of PNGs
}

Как видите, я использую lodepng , чтобы в конечном итоге создать PNG из пиксельных значений серого, содержащихся в image[].Все шло хорошо, пока я не понял, что мне пришлось изменить массив изображений на массив int вместо массива short, чтобы добавить некоторые новые функции в мой полный код.

Чтобы убедиться, что я все еще могу экспортировать в PNG, я также изменил эту функцию, изменив short image[] на int image[]:

void exportPNG(const char* filename, int image[], int npixels, int w, int h{}

После этого изменения я неожиданно получил изображения, содержащиетолько верхний левый квадрант фактического изображения с дополнительным шумом (вероятно, поврежденные / отсутствующие значения пикселей, шум не присутствует в виде фиксированных черных или белых столбцов / строк, но кажется случайным для глаз).

Iтакже пытался быть более явным, например, используя unsigned char file_out[npixels], а также добавляя '\0' в file_out[npixels+1], но ничего не работает и не изменяется.Я также попытался использовать unsigned char* file_out[npixels] в сочетании с unsigned char c[sizeof(int)] для копирования целых чисел в массив указателей символов с strcpy(), но вместо изображения я получаю странные черно-белые узоры.Мое лучшее предположение здесь, вероятно, потому, что мне пришлось использовать *file_out в функции lodepng ??

На всякий случай полезно знать: для lodepng_encode_file требуется переменная const unsigned char* image в качестве данных пикселей, поэтому я действительномне нужно получить массив символов вместо этого массива int.

Любая помощь будет признательна!


ОБНОВЛЕНИЕ: После комментариев я также решил дать больше информации о том, как изображениебыл приобретен и заставил меня понять, что у меня никогда не было никаких проблем при использовании short массивов.Во-первых, изображения доступны для меня в виде двоичных файлов, потому что мне, в конечном счете, придется использовать данные датчиков, и я хотел получить некоторое представление о двоичном потоке.Они читаются с использованием fread().

Сегодня я также протестировал его с моим предыдущим кодом с использованием массива short, и это снова прекрасно работает.Ооо, я думаю, что лучший способ сделать это просто использовать short массивы.Я попытаюсь восстановить другие функции для работы с short массивами, а затем, надеюсь, все снова будет хорошо.

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