将RGB转换为JPG格式到内存的代码

简介: 将RGB转换为JPG格式到内存的代码

前面有文章,将RGB格式转换为JPG文件。近来工作需要,需要RGB转换为JPG格式到内存。这事……

int rgb2jpgAction(struct jpeg_compress_struct* pCinfo, const char *pRgbData, const int width, const int height)
{
    int depth = RGB_COUNT;
    JSAMPROW row_pointer[1];
    pCinfo->image_width      = width;
    pCinfo->image_height     = height;
    pCinfo->input_components = depth;
    pCinfo->in_color_space   = JCS_RGB;
    jpeg_set_defaults(  pCinfo); 
    jpeg_set_quality(   pCinfo, JPEG_QUALITY, TRUE );
    jpeg_start_compress(pCinfo, TRUE);
    int row_stride = width * depth;
    while (pCinfo->next_scanline < pCinfo->image_height)
    {
        row_pointer[0] = (JSAMPROW)(pRgbData + pCinfo->next_scanline * row_stride);
        jpeg_write_scanlines(pCinfo, row_pointer, 1);
    }
    jpeg_finish_compress( pCinfo);
    jpeg_destroy_compress(pCinfo);
    return 0;
}
/**
 这里特别说明jpeg_mem_dest的第二个参数,buffer。
 如果在rgb2jpg声明指针或者缓冲区,然后试图复制到pDest,直接崩溃;或者取不到数据。
 研究了半天不行。必须是如下的写法。
 如果缓冲区不够怎么办?那就开大一点。
 char pDest[512*1024];
 int  size=512*1024;
 然后再传递过来。
 */
int rgb2jpg(const char *pRgbData, const int width, const int height, int type, char* pDest, int* pSize)
{
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE* pOutFile = NULL;
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);
    if (type)
    {
        if ((pOutFile = fopen(pDest, "wb")) == NULL)
        {
            return -1;
        }
        jpeg_stdio_dest(&cinfo, pOutFile);
    }
    else
    {
        jpeg_mem_dest(&cinfo, (unsigned char **)&pDest, (long unsigned int *)pSize);
    }
    rgb2jpgAction(&cinfo, pRgbData, width, height);
    if (type)
    {
        fclose(pOutFile);
    }
    return 0;
}
 return 0;
}
目录
相关文章
|
存储 安全 算法
【BLE】 BLE配对绑定保姆级介绍
实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以在应用层去实现相同功能,两者从功能上和安全性上没有本质区别,只不过应用层自己实现的话,需要自己选择密码算法,密钥生成,密钥交换等,如果你不是这方面的专家,你的应用就有可能会存在安全漏洞。设备跟手机绑定成功后,手机再次重连这个设备时,就会自动跳过service discovery过程,换句话说,配对的时候手机会把设备所有服务和characteristic的handle保存下来,二次重连的时候,直接用以前保存的handle值去操作设备。
5131 1
【BLE】 BLE配对绑定保姆级介绍
|
测试技术 C语言 Perl
内存优化-使用tcmalloc分析解决内存泄漏和内存暴涨问题
其实我一直很想写关于tcmalloc的内存泄漏检测的文章,只是一直记不起来该如何下笔,有时项目太忙,在整理这方便的思考过少,另外遇到的问题也不是很多,直到最近用tcmalloc帮A项目排查...
|
缓存 Java 应用服务中间件
一文带你使用xxl-job定时任务
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。 因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
4904 0
一文带你使用xxl-job定时任务
|
4月前
|
存储 人工智能 缓存
超越单智能体!原生多Agent系统开发指南(附完整源码)
本文深入探讨多智能体系统的核心原理与工程实践,解析其模块化、错误隔离与解释性优势,并通过实战示例展示如何构建多智能体新闻生成器,助力AI协作应用开发。
1240 0
|
9月前
|
IDE 编译器 项目管理
Dev-C++保姆级安装教程:Win10/Win11环境配置+避坑指南(附下载验证)
Dev-C++ 是一款专为 Windows 系统设计的轻量级 C/C++ 集成开发环境(IDE),内置 MinGW 编译器与调试器,支持代码高亮、项目管理等功能。4.9.9 版本作为经典稳定版,适合初学者和教学使用。本文详细介绍其安装流程、配置方法、功能验证及常见问题解决,同时提供进阶技巧和扩展学习资源,帮助用户快速上手并高效开发。
|
SpringCloudAlibaba Java 数据库连接
引入SpringCloud Alibaba(多配置集、GateWay)
引入SpringCloud Alibaba(多配置集、GateWay)
433 0
|
并行计算 Linux iOS开发
llamafile:单个文件分发和运行LLM
为了方便更多的零基础的初学者体验大语言模型,llamafile 提出了单文件运行大模型的方案。
|
人工智能 安全
软件 | 钉钉个人版,目前最适合我的笔记软件
这几年用了不少的笔记软件,比如印象笔记,notion,语雀等,甚至印象笔记也开了年度会员,但是其实都不怎么适合我。最后发现了这个钉钉个人版。
759 0
|
存储 人工智能 搜索推荐
硬核解读Stable Diffusion(4)
硬核解读Stable Diffusion
|
缓存 架构师 Linux
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议