因此,使用该功能后,我的代码可以正常工作,并从包含所有像素值的short
数组创建灰度PNG。该功能运行良好...
我不是C语言中的佼佼者,因此可能会被警告使用一些奇怪的代码:
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最终根据image[]
中包含的像素灰度值创建了PNG。一切正常,直到我意识到必须将图像数组更改为int
数组而不是short
数组,才能在我的完整代码中添加一些新功能。
为确保仍可以导出到PNG,我还通过将short image[]
更改为int image[]
来更改了此功能:
void exportPNG(const char* filename, int image[], int npixels, int w, int h{}
此更改之后,我突然得到的图像仅包含实际图像的左上象限,并带有额外的噪点(可能是像素值损坏/丢失,噪点不显示为固定的黑色或白色列/行,而是随机出现的)到眼睛)。
我也尝试使用unsigned char file_out[npixels]
更明确,并在'\0'
中添加file_out[npixels+1]
,但没有任何效果或改变。我还尝试结合使用unsigned char* file_out[npixels]
和unsigned char c[sizeof(int)]
将整数复制到带有strcpy()
的字符指针数组中,但是我得到了奇怪的黑白图案而不是图像。我最好的猜测可能是因为我必须在lodepng函数中使用*file_out
?
以防万一:知道lodepng_encode_file需要一个const unsigned char* image
变量作为像素数据,这就是为什么我真的需要获取一个char数组而不是该int数组的原因。
任何帮助将不胜感激!
更新:
发表评论后,我还决定提供有关如何获取图像的更多信息,并使我意识到使用short
数组时我从未遇到任何问题。首先,这些图像以二进制文件的形式提供给我,这是因为最终我将不得不使用传感器数据并希望对二进制流有某种感觉。使用fread()
读取它们。
今天,我还使用short
数组用我以前的代码对其进行了测试,并且可以再次完美工作。如此看来,最好的方法就是使用short
数组。我将尝试翻新其他函数以使用short
数组,然后希望一切都恢复正常。