xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 11KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-06-24
  • 語(yǔ)言: 其他
  • 標(biāo)簽: 電子相冊(cè)??ARM??

資源簡(jiǎn)介

基于GEC210 上實(shí)現(xiàn)電子相冊(cè)的圖片閱覽功能 , 用雙循環(huán)鏈表實(shí)現(xiàn), 其他功能可以自行添加,包括遍歷文件夾目錄查找等等

資源截圖

代碼片段和文件信息

#include?“mytype.h“

//?將jpeg文件的壓縮圖像數(shù)據(jù)讀出,放到j(luò)pg_buffer中去等待解壓
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?decode_jpg(char*?filename)
{
node_t?*picture?=?(node_t*)malloc(sizeof(node_t));

//?讀取圖片文件屬性信息
//?并根據(jù)其大小分配內(nèi)存緩沖區(qū)jpg_buffer
struct?stat?file_info;
Stat(filename?&file_info);
int?fd?=?Open(filename?O_RDONLY);

unsigned?char?*jpg_buffer;
jpg_buffer?=?(unsigned?char?*)calloc(1?file_info.st_size);
read_image_from_file(fd?jpg_buffer?file_info.st_size);


/***********?以下代碼都是固定的套路?****************/


//?聲明解壓縮結(jié)構(gòu)體,以及錯(cuò)誤管理結(jié)構(gòu)體
struct?jpeg_decompress_struct?cinfo;
struct?jpeg_error_mgr?jerr;

//?使用缺省的出錯(cuò)處理來(lái)初始化解壓縮結(jié)構(gòu)體
cinfo.err?=?jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);

//?配置該cinfo,使其從jpg_buffer中讀取jpg_size個(gè)字節(jié)
//?這些數(shù)據(jù)必須是完整的JPEG數(shù)據(jù)
jpeg_mem_src(&cinfo?jpg_buffer?file_info.st_size);


//?讀取JPEG文件的頭,并判斷其格式是否合法
int?ret?=?jpeg_read_header(&cinfo?true);
if(ret?!=?1)
{
fprintf(stderr?“[%d]:?jpeg_read_header?failed:?“
“%s\n“?__LINE__?strerror(errno));
exit(1);
}

//?開始解碼
jpeg_start_decompress(&cinfo);

//?妥善保管圖片的尺寸信息
picture->image_info.width?=?cinfo.output_width;
picture->image_info.height?=?cinfo.output_height;
picture->image_info.pixel_size?=?cinfo.output_components;

//?計(jì)算一行的字節(jié)數(shù)
int?row_stride?=?picture->image_info.width?*
picture->image_info.pixel_size;

//?根據(jù)圖片的尺寸大小,分配一塊相應(yīng)的內(nèi)存rgb_buffer
//?用來(lái)存放從jpg_buffer解壓出來(lái)的圖像數(shù)據(jù)
unsigned?long?rgb_size;
rgb_size?=?picture->image_info.width?*
picture->image_info.height?*?
picture->image_info.pixel_size;
picture->rgb_buf?=?(unsigned?char?*)calloc(1?rgb_size);

//?循環(huán)地將圖片的每一行讀出并解碼到rgb_buffer中
int?line?=?0;
while(cinfo.output_scanline? {
unsigned?char?*buffer_array[1];
buffer_array[0]?=?picture->rgb_buf?+
(cinfo.output_scanline)?*?row_stride;
jpeg_read_scanlines(&cinfo?buffer_array?1);
}

//?解壓完了,將jpeg相關(guān)的資源釋放掉
? jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
free(jpg_buffer);

//?現(xiàn)在我們得到了兩個(gè)必要的東西:
//?圖片的尺寸信息:?picture->image_info
//?圖片的RGB數(shù)據(jù):??picture->rgb_buf


/**************?以上代碼都是固定的套路?*********************/

add_link(picture);

return?0;
}



?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----

?????文件??????15114??2018-05-10?14:03??電子相冊(cè)\a.out

?????文件???????3365??2018-05-10?12:31??電子相冊(cè)\decode.c

?????文件???????1158??2018-05-10?14:06??電子相冊(cè)\display.c

?????文件???????1722??2018-05-09?22:48??電子相冊(cè)\find.c

?????文件????????461??2018-05-10?11:37??電子相冊(cè)\link.c

?????文件???????1061??2018-05-10?13:50??電子相冊(cè)\main.c

?????文件???????1820??2018-05-10?14:01??電子相冊(cè)\mapped.c

?????文件???????1016??2018-05-10?13:55??電子相冊(cè)\mytype.h

?????目錄??????????0??2018-05-12?14:10??電子相冊(cè)

-----------?---------??----------?-----??----

????????????????25717????????????????????9


評(píng)論

共有 條評(píng)論