Таким образом, мой код работал нормально, когда я имел эту функцию, создавая 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
массивами, а затем, надеюсь, все снова будет хорошо.