我是C语言的新手,试图了解基本知识。
我想调用一个创建并返回jpeg图片的函数。
在其他语言(如Python)中,您只需将函数的返回值放入变量中即可。 C显然不能那样工作。
那么对于一个函数来说,向另一个函数索要jpeg图像并接收回大小未知的图像的正确方法是什么?
正确的方法是创建一个结构,该结构定义一个指向缓冲区和长度的指针,然后在两个函数的作用域之外设置一个变量,以便两个函数都可以访问数据吗?
大概我还需要通过tjFree(&_compressedImage);
我从网上某个地方复制了此功能的代码。它创建一个jpeg函数。我想找回生成的jpeg。
static void makeimg() {
const int JPEG_QUALITY = 75;
const int COLOR_COMPONENTS = 3;
int _width = 1920;
int _height = 1080;
long unsigned int _jpegSize = 0;
unsigned char* _compressedImage = NULL; //!< Memory is allocated by tjCompress2 if _jpegSize == 0
unsigned char buffer[_width*_height*COLOR_COMPONENTS]; //!< Contains the uncompressed image
tjhandle _jpegCompressor = tjInitCompress();
tjCompress2(_jpegCompressor, buffer, _width, 0, _height, TJPF_RGB,
&_compressedImage, &_jpegSize, TJSAMP_444, JPEG_QUALITY,
TJFLAG_FASTDCT);
tjDestroy(_jpegCompressor);
//to free the memory allocated by TurboJPEG (either by tjAlloc(),
//or by the Compress/Decompress) after you are done working on it:
tjFree(&_compressedImage);
}
任何有关好的方法的指导都值得赞赏。
我是C(Python经验)的初学者,因此,如果您能尽可能多地解释自己的回答,将不胜感激。
答案 0 :(得分:1)
有多种方法可以做到这一点。我更喜欢以下内容:
/*
* Makes an image and returns the length
* returns < 0 on error
*
* Call as follows:
* char *image ;
* int len = make_image( &image );
* if (len < 0) { /* Process error code */ }
*/
int makeImage(void **image) {
unsigned char *_image ;
int length ;
/* Create image and set the length of buffer in length variable */
/* Return the image */
*image = _image ;
return length;
}
如果不需要多个错误代码,请将image参数设置为null并进行检查就足够了。