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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7 libjpeg使用

發(fā)布時間:2025/3/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7 libjpeg使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、交叉編譯libjepg編譯

tar xzf libjpeg-turbo-1.2.1.tar.gz

./configure –help

./configure --prefix=/work/project/first_project/13libjepg/libjpeg-turbo-1.2.1/tmp/? --host=arm-linux

make

make install

二、交叉編譯jepg2rgb.c

arm-linux-gcc -o jpg2rgb jpg2rgb.c? -I /work/project/first_project/13libjepg/libjpeg-turbo-1.2.1/tmp/include/ -L /work/project/first_project/13libjepg/libjpeg-turbo-1.2.1/tmp/lib/ –ljpeg

把庫考到開發(fā)板上

cp ../libjpeg-turbo-1.2.1/tmp/lib/*so* /work/nfs_root/fs_mini_mdev/lib/

?

編譯出來的頭文件應該放入:
cd /work/project/first_project/13libjepg/libjpeg-turbo-1.2.1/tmp/include

cp *? /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include? -rf

?

編譯出來的庫文件應該放入:
cd /work/project/first_project/13libjepg/libjpeg-turbo-1.2.1/tmp/lib

sudo cp * /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib -d –rf

?

現在不需要指定目錄

arm-linux-gcc -o jpg2rgb jpg2rgb.c –ljpeg

?

1th輸出源文件信息,及解壓后信息

#include <stdio.h> #include "jpeglib.h" #include <setjmp.h>/* Allocate and initialize a JPEG decompression object // 分配和初始化一個decompression結構體 Specify the source of the compressed data (eg, a file) // 指定源文件 Call jpeg_read_header() to obtain image info // 用jpeg_read_header獲得jpg信息 Set parameters for decompression // 設置解壓參數,比如放大、縮小 jpeg_start_decompress(...); // 啟動解壓:jpeg_start_decompress while (scan lines remain to be read)jpeg_read_scanlines(...); // 循環(huán)調用jpeg_read_scanlines jpeg_finish_decompress(...); // jpeg_finish_decompress Release the JPEG decompression object // 釋放decompression結構體 *//* Uage: jpg2rgb <jpg_file>*/int main(int argc, char **argv) {struct jpeg_decompress_struct cinfo;struct jpeg_error_mgr jerr;FILE * infile;// 分配和初始化一個decompression結構體cinfo.err = jpeg_std_error(&jerr);jpeg_create_decompress(&cinfo);// 指定源文件if ((infile = fopen(argv[1], "rb")) == NULL) {fprintf(stderr, "can't open %s\n", argv[1]);return -1;}jpeg_stdio_src(&cinfo, infile);// 用jpeg_read_header獲得jpg信息jpeg_read_header(&cinfo, TRUE);/* 源信息 */printf("image_width = %d\n", cinfo.image_width);printf("image_height = %d\n", cinfo.image_height);printf("num_components = %d\n", cinfo.num_components);// 設置解壓參數,比如放大、縮小// 啟動解壓:jpeg_start_decompressjpeg_start_decompress(&cinfo);/* 輸出的圖像信息 */printf("output_width = %d\n", cinfo.output_width);printf("output_height = %d\n", cinfo.output_height);printf("output_components = %d\n", cinfo.output_components);// 循環(huán)調用jpeg_read_scanlines一行一行的獲得解壓數據 jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);return 0; }

?

使用LCD輸出

#include <stdio.h> #include "jpeglib.h" #include <setjmp.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <linux/fb.h> #include <string.h>#define FB_DEVICE_NAME "/dev/fb0" #define DBG_PRINTF printfstatic int g_fd;static struct fb_var_screeninfo g_tFBVar; static struct fb_fix_screeninfo g_tFBFix; static unsigned char *g_pucFBMem; static unsigned int g_dwScreenSize;static unsigned int g_dwLineWidth; static unsigned int g_dwPixelWidth;static int FBDeviceInit(void) {int ret;g_fd = open(FB_DEVICE_NAME, O_RDWR);if (0 > g_fd){DBG_PRINTF("can't open %s\n", FB_DEVICE_NAME);}ret = ioctl(g_fd, FBIOGET_VSCREENINFO, &g_tFBVar);if (ret < 0){DBG_PRINTF("can't get fb's var\n");return -1;}ret = ioctl(g_fd, FBIOGET_FSCREENINFO, &g_tFBFix);if (ret < 0){DBG_PRINTF("can't get fb's fix\n");return -1;}g_dwScreenSize = g_tFBVar.xres * g_tFBVar.yres * g_tFBVar.bits_per_pixel / 8;g_pucFBMem = (unsigned char *)mmap(NULL , g_dwScreenSize, PROT_READ | PROT_WRITE, MAP_SHARED, g_fd, 0);if (0 > g_pucFBMem) {DBG_PRINTF("can't mmap\n");return -1;} /*g_tFBOpr.iXres = g_tFBVar.xres;g_tFBOpr.iYres = g_tFBVar.yres;g_tFBOpr.iBpp = g_tFBVar.bits_per_pixel; */g_dwLineWidth = g_tFBVar.xres * g_tFBVar.bits_per_pixel / 8;g_dwPixelWidth = g_tFBVar.bits_per_pixel / 8;return 0; }static int FBShowPixel(int iX, int iY, unsigned int dwColor) {unsigned char *pucFB;unsigned short *pwFB16bpp;unsigned int *pdwFB32bpp;unsigned short wColor16bpp; /* 565 */int iRed;int iGreen;int iBlue;if ((iX >= g_tFBVar.xres) || (iY >= g_tFBVar.yres)){DBG_PRINTF("out of region\n");return -1;}pucFB = g_pucFBMem + g_dwLineWidth * iY + g_dwPixelWidth * iX;pwFB16bpp = (unsigned short *)pucFB;pdwFB32bpp = (unsigned int *)pucFB;switch (g_tFBVar.bits_per_pixel){case 8:{*pucFB = (unsigned char)dwColor;break;}case 16:{iRed = (dwColor >> (16+3)) & 0x1f;iGreen = (dwColor >> (8+2)) & 0x3f;iBlue = (dwColor >> 3) & 0x1f;wColor16bpp = (iRed << 11) | (iGreen << 5) | iBlue;*pwFB16bpp = wColor16bpp;break;}case 32:{*pdwFB32bpp = dwColor;break;}default :{DBG_PRINTF("can't support %d bpp\n", g_tFBVar.bits_per_pixel);return -1;}}return 0; }static int FBCleanScreen(unsigned int dwBackColor) {unsigned char *pucFB;unsigned short *pwFB16bpp;unsigned int *pdwFB32bpp;unsigned short wColor16bpp; /* 565 */int iRed;int iGreen;int iBlue;int i = 0;pucFB = g_pucFBMem;pwFB16bpp = (unsigned short *)pucFB;pdwFB32bpp = (unsigned int *)pucFB;switch (g_tFBVar.bits_per_pixel){case 8:{memset(g_pucFBMem, dwBackColor, g_dwScreenSize);break;}case 16:{iRed = (dwBackColor >> (16+3)) & 0x1f;iGreen = (dwBackColor >> (8+2)) & 0x3f;iBlue = (dwBackColor >> 3) & 0x1f;wColor16bpp = (iRed << 11) | (iGreen << 5) | iBlue;while (i < g_dwScreenSize){*pwFB16bpp = wColor16bpp;pwFB16bpp++;i += 2;}break;}case 32:{while (i < g_dwScreenSize){*pdwFB32bpp = dwBackColor;pdwFB32bpp++;i += 4;}break;}default :{DBG_PRINTF("can't support %d bpp\n", g_tFBVar.bits_per_pixel);return -1;}}return 0; }static int FBShowline(int iXStart, int iXEnd, int iY, unsigned char *pucRGBArray) {int i = iXStart * 3; //每個像素占據三個字節(jié)int iX;unsigned int dwColor;if(iY >= g_tFBVar.yres)return -1;if(iXStart>= g_tFBVar.xres)return -1;if((iXEnd >= g_tFBVar.xres)){iXEnd = g_tFBVar.xres; }for(iX = iXStart; iX < iXEnd; iX++){/* 0xRRGGBB */dwColor = (pucRGBArray[i] << 16 ) + (pucRGBArray[i + 1] << 8) + (pucRGBArray[i + 2] << 0);i += 3;FBShowPixel(iX, iY, dwColor);}return 0; }/* Allocate and initialize a JPEG decompression object // 分配和初始化一個decompression結構體 Specify the source of the compressed data (eg, a file) // 指定源文件 Call jpeg_read_header() to obtain image info // 用jpeg_read_header獲得jpg信息 Set parameters for decompression // 設置解壓參數,比如放大、縮小 jpeg_start_decompress(...); // 啟動解壓:jpeg_start_decompress while (scan lines remain to be read)jpeg_read_scanlines(...); // 循環(huán)調用jpeg_read_scanlines jpeg_finish_decompress(...); // jpeg_finish_decompress Release the JPEG decompression object // 釋放decompression結構體 *//* Uage: jpg2rgb <jpg_file>*/int main(int argc, char **argv) {struct jpeg_decompress_struct cinfo;struct jpeg_error_mgr jerr;FILE * infile;int row_stride; unsigned char *buffer;if(FBDeviceInit()){return -1;}FBCleanScreen(0);// 分配和初始化一個decompression結構體cinfo.err = jpeg_std_error(&jerr);jpeg_create_decompress(&cinfo);// 指定源文件if ((infile = fopen(argv[1], "rb")) == NULL) {fprintf(stderr, "can't open %s\n", argv[1]);return -1;}jpeg_stdio_src(&cinfo, infile);// 用jpeg_read_header獲得jpg信息jpeg_read_header(&cinfo, TRUE);/* 源信息 */printf("image_width = %d\n", cinfo.image_width);printf("image_height = %d\n", cinfo.image_height);printf("num_components = %d\n", cinfo.num_components);// 設置解壓參數,比如放大、縮小printf("enter M/N: \n");scanf("%d/%d", &cinfo.scale_num, &cinfo.scale_denom);printf("scale to : %d/%d\n", cinfo.scale_num, cinfo.scale_denom);// 啟動解壓:jpeg_start_decompressjpeg_start_decompress(&cinfo);/* 輸出的圖像信息 */printf("output_width = %d\n", cinfo.output_width);printf("output_height = %d\n", cinfo.output_height);printf("output_components = %d\n", cinfo.output_components);//一行的數據長度row_stride = cinfo.output_width * cinfo.output_components; buffer = malloc(row_stride);// 循環(huán)調用jpeg_read_scanlines一行一行的獲得解壓數據while (cinfo.output_scanline < cinfo.output_height) {(void) jpeg_read_scanlines(&cinfo, &buffer, 1);//寫到LCD去FBShowline(0, cinfo.output_width, cinfo.output_scanline, buffer);}free(buffer);jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);return 0; }

轉載于:https://www.cnblogs.com/CZM-/p/5382865.html

總結

以上是生活随笔為你收集整理的7 libjpeg使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久毛片网站 | 少妇被躁爽到高潮无码文 | 国模杨依粉嫩蝴蝶150p | 女人下边被添全过视频 | 久久久99精品国产一区二区三区 | 高潮爽爆喷水h | 国产精九九网站漫画 | 涩涩亚洲 | 久久伊人成人 | 国产精品av一区二区 | 中国一级黄色 | 越南毛茸茸的少妇 | 人妻精品久久久久中文字幕 | 91爱爱视频 | 欧美精品久久99 | 在线一二三区 | 天天夜夜啦啦啦 | 蜜桃成人av | 国产伦精品一区二区免费 | 欧美一区二区黄色 | 91在线亚洲 | 日韩黄色一级片 | 欧美精品免费一区二区三区 | 日韩新片王网 | 91一区二区三区四区 | 国产探花精品一区二区 | 亚洲欧美天堂网 | 成人在线观看一区 | 永久免费视频网站 | 亚洲区第一页 | 久久久久久天堂 | 久久久久成人精品无码中文字幕 | 泰坦尼克号3小时49分的观看方法 | 天天爱天天做天天爽 | 狠狠地日| 偷拍亚洲色图 | 4438亚洲| 日韩欧美在线视频 | 天天撸夜夜操 | 久久免费视频1 | 91原视频 | 日本黄色免费看 | 99re在线视频观看 | 日批的视频 | 51久久 | 色婷婷av一区二区三区之e本道 | 伊人影院在线视频 | 中日毛片| 黑人巨大精品欧美一区免费视频 | 三级网站免费观看 | 九热这里只有精品 | 日本高清不卡在线观看 | 久久久久9999 | 4438亚洲最大| 成年人视频网 | 91欧美亚洲 | 亚洲色图校园春色 | 国产二区精品 | 国产破处视频 | 麻豆免费观看网站 | 欧美亚洲在线 | 日韩色在线观看 | 精品无码三级在线观看视频 | 欧美456| 男男免费视频 | 久色成人 | 国产精品成人免费精品自在线观看 | 亚洲欧美不卡 | www国产精品内射熟女 | 看特级毛片 | 日本一级淫片免费放 | 国产一区二区三区电影在线观看 | 国产又大又粗又硬 | 综合国产精品 | 观看毛片 | 污视频免费在线 | 人妻精品无码一区二区 | 蜜桃臀一区二区三区 | 国产高清亚洲 | 欧美激情15p| 欧美日韩中文字幕在线观看 | 99re在线视频播放 | 国产高清不卡视频 | 黄色片在线视频 | 久久免费资源 | 久久伊人一区二区 | 在线观看第一页 | 天天干b| 伦理片久久| 日韩成人av在线 | 日韩免费在线 | 特级毛片在线播放 | 国产suv精品一区二区68 | 看黄色的网址 | 免费观看成人av | 日韩精品一区二区三区中文在线 | 一级片视频网站 | 精品98 | 精品福利三区3d卡通动漫 |