日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用libjpeg进行JPEG图像解码

發(fā)布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用libjpeg进行JPEG图像解码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


如題:如何對test.jpg進(jìn)行解碼?


注:這里使用libjpeg庫進(jìn)行圖像解碼。也可以不使用libjpeg庫,但是比較繁瑣。


直接上代碼:

#include "jpeglib.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main()

{

FILE *input_file;

input_file=fopen("test.jpg","rb");
?

struct jpeg_decompress_struct cinfo;//JPEG圖像在解碼過程中,使用jpeg_decompress_struct類型的結(jié)構(gòu)體來表示,圖像的所有信息都存儲在結(jié)構(gòu)體中
? ? struct jpeg_error_mgr jerr;//定義一個標(biāo)準(zhǔn)的錯誤結(jié)構(gòu)體,一旦程序出現(xiàn)錯誤就會調(diào)用exit()函數(shù)退出進(jìn)程

? ?

cinfo.err = jpeg_std_error(&jerr);//綁定錯誤處理結(jié)構(gòu)對象

? ? jpeg_create_decompress(&cinfo);//初始化cinfo結(jié)構(gòu)
? ? jpeg_stdio_src(&cinfo,input_file);//指定解壓縮數(shù)據(jù)源
? ? jpeg_read_header(&cinfo,TRUE);//獲取文件信息
? ? jpeg_start_decompress(&cinfo);//開始解壓縮

? ? unsigned long width = cinfo.output_width;//圖像寬度
? ? unsigned long height = cinfo.output_height;//圖像高度
? ? unsigned short depth = cinfo.output_components;//圖像深度

? ?? unsigned char *src_buff;//用于存取解碼之后的位圖數(shù)據(jù)(RGB格式)
src_buff = (unsigned char *)malloc(width * height * depth);//分配位圖數(shù)據(jù)空間
? ? memset(src_buff, 0, sizeof(unsigned char) * width * height * depth);//清0

? ?? JSAMPARRAY buffer;//用于存取一行數(shù)據(jù)
? ? buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo, JPOOL_IMAGE, width*depth, 1);//分配一行數(shù)據(jù)空間

unsigned char *point =?src_buff;
? ? while(cinfo.output_scanline < height)//逐行讀取位圖數(shù)據(jù)
? ? {
? ? ? ? jpeg_read_scanlines(&cinfo, buffer, 1); ? ?//讀取一行jpg圖像數(shù)據(jù)到buffer
? ? ? ? memcpy(point, *buffer, width*depth); ? ?//將buffer中的數(shù)據(jù)逐行給src_buff
? ? ? ? point += width * depth; ? ? ? ? ? ?//指針偏移一行
? ? }

? ? jpeg_finish_decompress(&cinfo);//解壓縮完畢
? ? jpeg_destroy_decompress(&cinfo);// 釋放資源
? ? free(src_buff);//釋放資源

? ? fclose(input_file);

}



程序中src_buff就是解碼之后的位圖數(shù)據(jù)

總結(jié)

以上是生活随笔為你收集整理的使用libjpeg进行JPEG图像解码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。