网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
need_size = tjBufSizeYUV2(width, padding, height, subsample);
if (need_size != yuv_size)
{
printf("we detect yuv size: %d, but you give: %d, check again.\n", need_size, yuv_size);
return 0;
}
ret = tjCompressFromYUV(handle, yuv_buffer, width, padding, height, subsample, jpeg_buffer, jpeg_size, quality, flags);
if (ret < 0)
{
printf("compress to jpeg failed: %s\n", tjGetErrorStr());
}
tjDestroy(handle);
return ret;
}
另外,该库也支持从RGB转换成YUV,或反之。调用相应的函数即可,不再详述。示例代码如下:
int trgb2yuv(unsigned char* rgb_buffer, int width, int height, unsigned char** yuv_buffer, int* yuv_size, int subsample)
{
tjhandle handle = NULL;
int flags = 0;
int padding = 1; // 1或4均可,但不能是0
int pixelfmt = TJPF_RGB;
int ret = 0;
handle = tjInitCompress();
flags |= 0;
*yuv_size = tjBufSizeYUV2(width, padding, height, subsample);
*yuv_buffer =(unsigned char *)malloc(*yuv_size);
if (*yuv_buffer == NULL)
{
printf("malloc buffer for rgb failed.\n");
return -1;
}
ret = tjEncodeYUV3(handle, rgb_buffer, width, 0, height, pixelfmt, *yuv_buffer, padding, subsample, flags);
if (ret < 0)
{
printf("encode to yuv failed: %s\n", tjGetErrorStr());
}
tjDestroy(handle);
return ret;
}
int tyuv2rgb(unsigned char* yuv_buffer, int yuv_size, int width, int height, int subsample, unsigned char** rgb_buffer, int* rgb_size)
{
tjhandle handle = NULL;
int flags = 0;
int padding = 1; // 1或4均可,但不能是0
int pixelfmt = TJPF_RGB;
int need_size = 0;
int ret = 0;
handle = tjInitDecompress();
flags |= 0;
need_size = tjBufSizeYUV2(width, padding, height, subsample);
if (need_size != yuv_size)
{
printf("we detect yuv size: %d, but you give: %d, check again.\n", need_size, yuv_size);
return -1;
}
*rgb_size = width*height*tjPixelSize[pixelfmt];
*rgb_buffer =(unsigned char *)malloc(*rgb_size);
if (*rgb_buffer == NULL)
{
printf("malloc buffer for rgb failed.\n");
return -1;
}
ret = tjDecodeYUV(handle, yuv_buffer, padding, subsample, *rgb_buffer, width, 0, height, pixelfmt, flags);
if (ret < 0)
{
printf("decode to rgb failed: %s\n", tjGetErrorStr());
}
tjDestroy(handle);
return ret;
}
以上代码示例,二级指针均在函数内分配内存,需要调用者自行释放,否则会有内存泄漏。
李迟 7.8
![img](https://img-blog.csdnimg.cn/img_convert/a8ba39ecc2e1d89d22d30da7f89da1fe.png)
![img](https://img-blog.csdnimg.cn/img_convert/7b01003b6175bc3da2a2c277b08c3cdf.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
s.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**