libjpeg RGB转JPEG

下载libjpeg 9b并解压
libjpeg 9b

tar -xzf  jpegsrc.v9b.tar.gz

进如解压好的文件夹 编译

 ./configure
 mkdir build
 make -j32
 make install DESTDIR=/XXX/build

拷贝include和lib文件夹到自己的工程
cmake引入

link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

代码如下

#include "jpeglib.h"

// 设置一个足够大的buffer
char jpeg[512*1024];
int  jpeg_size=512*1024;
rgb2jpeg(rgb_buffer, width, height, channel, jpeg, &jpeg_size);

int rgb2jpeg(const char *rgb_buffer, int width, int height, int depth, char *jpeg_buffer, int *size)
{
  jpeg.err = jpeg_std_error(&jerr);
  jpeg_create_compress(&jpeg);
  jpeg_mem_dest(&jpeg, (unsigned char **)&jpeg_buffer, (long unsigned int *)size);

  JSAMPROW row_pointer[1];

  jpeg.image_width = width;
  jpeg.image_height = height;
  jpeg.input_components = depth;
  jpeg.in_color_space = JCS_RGB;

  jpeg_set_defaults(&jpeg);
  jpeg_start_compress(&jpeg, TRUE);

  int row_stride = width * depth;
  while (jpeg.next_scanline < jpeg.image_height)
  {
    row_pointer[0] = (JSAMPROW)(rgb_buffer + jpeg.next_scanline * row_stride);
    jpeg_write_scanlines(&jpeg, row_pointer, 1);
  }

  jpeg_finish_compress(&jpeg);
  jpeg_destroy_compress(&jpeg);

  return 0;
}

最后

如有不好的地方或做的不对的地方,欢迎联系我
WeChat: Debu_cat

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将YUV图像换为JPEG图像,需要使用libjpeg库。下面是一个简单的示例代码: ```c #include <stdio.h> #include <jpeglib.h> #define WIDTH 640 #define HEIGHT 480 void yuv_to_rgb(unsigned char *yuv, unsigned char *rgb) { int y = yuv[0], u = yuv[1], v = yuv[2]; int r = y + 1.402 * (v - 128); int g = y - 0.34414 * (u - 128) - 0.71414 * (v - 128); int b = y + 1.772 * (u - 128); rgb[0] = (unsigned char)r; rgb[1] = (unsigned char)g; rgb[2] = (unsigned char)b; } void yuv_to_jpeg(unsigned char *yuv_data, unsigned char *jpeg_data, int quality) { struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; JSAMPROW row_pointer[1]; int row_stride; cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); jpeg_mem_dest(&cinfo, &jpeg_data, &jpeg_size); cinfo.image_width = WIDTH; cinfo.image_height = HEIGHT; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, quality, TRUE); jpeg_start_compress(&cinfo, TRUE); unsigned char rgb_data[WIDTH * HEIGHT * 3]; for (int y = 0; y < HEIGHT; y++) { for (int x = 0; x < WIDTH; x++) { int i = y * WIDTH + x; yuv_to_rgb(yuv_data + i * 3, rgb_data + i * 3); } row_pointer[0] = &rgb_data[y * WIDTH * 3]; row_stride = WIDTH * 3; jpeg_write_scanlines(&cinfo, row_pointer, 1); } jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); } int main() { unsigned char yuv_data[WIDTH * HEIGHT * 3]; // 从文件或摄像头等读取YUV数据 unsigned char jpeg_data[WIDTH * HEIGHT * 3]; yuv_to_jpeg(yuv_data, jpeg_data, 80); // 将JPEG数据写入文件或发送到网络等 return 0; } ``` 该代码将YUV图像换为RGB图像,然后使用libjpeg库将RGB图像压缩为JPEG格式。在`yuv_to_jpeg`函数中,首先创建一个`jpeg_compress_struct`结构体,并设置压缩参数。然后,将RGB图像逐行写入JPEG文件,最后完成压缩并销毁压缩结构体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值