RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)

简介: RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)

从一个大的RGBA数据中,剪切部分为RGB格式:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "gh_rgba2jpg.h"
#include <jpeglib.h>
int clipRgbaToJpgFile(const char *pFileName, const char* pRgbaData, const int nWidth, const int nHeight, const int nClipLeft, const int nClipTop, const int nClipWidth, const int nClipHeight)
{
    char* pClipSource     = NULL;
    char* pClipData       = NULL;
    int pixcelBytes       = nClipWidth*nClipHeight*3;
    int i = 0;
    int j = 0;
    pClipSource = malloc(pixcelBytes);
    if (!pClipSource)
    {
        return -1;
    }
    //移动到制定位置
    pRgbaData += nClipTop * nWidth * 4;
    pRgbaData += nClipLeft * 4;
    pClipData = pClipSource;
    for (i=0; i<nClipHeight; i++)
    {
        for (j=0; j<nClipWidth; j++)
        {
            //这样性能如何?
            memcpy(pClipData, pRgbaData, 3);
            pRgbaData += 4;
            pClipData += 3;
        }
        pRgbaData += (nWidth-nClipWidth)    * 4;
    }
    rgb2jpg(pFileName, pClipSource, nClipWidth, nClipHeight);
    //释放资源
    free(pClipSource);
    return 0;
}



将剪切后的RGB保存为JPG文件:

int rgb2jpg(char *jpg_file, char *pdata, int width, int height)
{
    int depth = 3;
    JSAMPROW row_pointer[1];
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE *outfile;
    if ((outfile = fopen(jpg_file, "wb")) == NULL)
    {
        return -1;
    }
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo); 
    jpeg_stdio_dest(&cinfo, outfile);
    cinfo.image_width      = width;
    cinfo.image_height     = height;
    cinfo.input_components = depth;
    cinfo.in_color_space   = JCS_RGB;
    jpeg_set_defaults(&cinfo);
    jpeg_set_quality(&cinfo, JPEG_QUALITY, TRUE );
    jpeg_start_compress(&cinfo, TRUE);
    int row_stride = width * depth;
    while (cinfo.next_scanline < cinfo.image_height)
    {
        row_pointer[0] = (JSAMPROW)(pdata + cinfo.next_scanline * row_stride);
        jpeg_write_scanlines(&cinfo, row_pointer, 1);
    }
    jpeg_finish_compress(&cinfo);
    jpeg_destroy_compress(&cinfo);
    fclose(outfile);
    return 0;
}


目录
相关文章
|
缓存 计算机视觉 数据格式
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决)
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决
|
2月前
|
编解码 数据安全/隐私保护
pdf保存为img
【9月更文挑战第06天】
36 6
|
3月前
GDAL创建JPG或PNG格式图像
GDAL创建JPG或PNG格式图像
101 0
|
4月前
|
Python
GIF格式 保存
【7月更文挑战第18天】
73 3
|
图形学
Qt&Vtk-003-读取jpg、png、dicom等格式图片
本文其实才能算是真正的Qt与Vtk结合,具体实现JPG、PNG、TIFF、DICOM、BMP及一个3D Cube显示。
687 1
Qt&Vtk-003-读取jpg、png、dicom等格式图片
|
计算机视觉
将TIF图像格式转化为PNG或者JPG格式
安装好cv2库,如果没有安装,请使用pip install opencv-python进行安装。
242 0
*.pvr.ccz文件还原成png格式
*.pvr.ccz文件还原成png格式
227 0
|
Java 文件存储 Maven
将PDF文件转换成PNG图片
有这样一个业务场景:需要在 WEB 页面中浏览 PDF 文件,PDF 文件存储在 FTP 服务器上,即 PDF 文件对外提供的访问地址的协议是 ftp 的。有如下几个硬条件、软需求的要求: - WEB 页面本身的可视区域不是很大; - 不想弹出对话框展示 PDF 文件; - 谷歌浏览器不支持在 http 协议的页面里内嵌 ftp 协议的路径; - 在 WEB 页面中使用系统默认的 PDF 阅读器的体验不是很好,滚动条啦,边框啦。
311 0
RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)
RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)
287 0