libjpeg存文件

#include <cstdio>
#include <cstdlib>
#include "jpeglib.h"

int _imageWidth = 320;     // 生成的图像宽度
int _imageHeight = 240;    // 生成的图像高度
int _inputComponents = 1; // 生成的图像深度

try
{
    struct jpeg_compress_struct jcs;
    struct jpeg_error_mgr jem;

    jcs.err = jpeg_std_error(&jem);
    jpeg_create_compress(&jcs);

    FILE *fp = nullptr;

    if ((fp = fopen(path.c_str(), "wb")) != nullptr)
    {
        jpeg_stdio_dest(&jcs, fp);

        jcs.image_width = _imageWidth;
        jcs.image_height = _imageHeight;
        jcs.input_components = _inputComponents;

        if (_inputComponents == 1)
        {
            jcs.in_color_space = JCS_GRAYSCALE;
        }
        else
        {
            jcs.in_color_space = JCS_RGB;
        }

        jpeg_set_defaults(&jcs);
        jpeg_set_quality(&jcs, 90, TRUE);

        jpeg_start_compress(&jcs, TRUE);

        JSAMPROW rowPointer[1];
        long rowStride = _imageWidth * _inputComponents;
        JSAMPROW p = (JSAMPROW)buf;
        while (jcs.next_scanline < _imageHeight)
        {
            rowPointer[0] = &p[jcs.next_scanline * rowStride];
            (void)jpeg_write_scanlines(&jcs, rowPointer, 1);
        }

        jpeg_finish_compress(&jcs);

        fclose(fp);
        fp = nullptr;
    }

    jpeg_destroy_compress(&jcs);
}
catch (...)
{
    return false;
}
posted @   thomas_blog  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示