資源簡介
純C語言+libjpeg實現最簡單jpeg圖片解碼顯示程序
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
void?write_lcd(char?*p_lcd?unsigned?char?*bmp_buffer
int?width?int?height?int?pixel_size?struct?fb_var_screeninfo?*vinfo);
void?usage(const?char?*name)
{
fprintf(stderr?“Usage:?%s?\n“?name);
exit(1);
}
unsigned?long?read_image_from_file(int?fd?unsigned?char?*jpg_buffer?unsigned?long?jpg_size)
{
unsigned?long?nread?=?0;
unsigned?long?total?=?0;
while(jpg_size?>?0)
{
nread?=?read(fd?jpg_buffer?jpg_size);
jpg_size?-=?nread;
jpg_buffer?+=?nread;
total?+=?nread;
}
close(fd);
return?total;
}
int?Stat(const?char?*filename?struct?stat?*file_info)
{
int?ret?=?stat(filename?file_info);
if(ret?==?-1)
{
fprintf(stderr?“[%d]:?stat?failed:?%s\n“?__LINE__?strerror(errno));
exit(1);
}
return?ret;
}
int?Open(const?char?*filename?int?mode)
{
int?fd?=?open(filename?mode);
if(fd?==?-1)
{
fprintf(stderr?“[%d]:?open?failed:?%s\n“?__LINE__?strerror(errno));
exit(1);
}
return?fd;
}
int?main(int?argc?char?**argv)
{
if(argc?!=?2)
{
usage(argv[0]);
}
struct?stat?file_info;
unsigned?char?*jpg_buffer;
//?聲明解壓縮結構體,以及錯誤管理結構體
struct?jpeg_decompress_struct?cinfo;
struct?jpeg_error_mgr?jerr;
unsigned?long?bmp_size;
unsigned?char?*bmp_buffer;
//?讀取圖片文件屬性信息,并根據其大小分配內存緩沖區
Stat(argv[1]?&file_info);
int?fd?=?Open(argv[1]?O_RDONLY);
jpg_buffer?=?(unsigned?char?*)calloc(1?file_info.st_size);
read_image_from_file(fd?jpg_buffer?file_info.st_size);
//?使用缺省的出錯處理來初始化解壓縮結構體
cinfo.err?=?jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
//?配置該cinfo,使其從jpg_buffer中讀取jpg_size個字節
//?這些數據必須是完整的JPEG數據
- 上一篇:c++編寫的卡諾圖繪制程序
- 下一篇:mfc 實現簡單繪制矩形 圓形……
評論
共有 條評論