Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >将jpeg图片显示在framebuffer上

将jpeg图片显示在framebuffer上

作者头像
用户3765803
发布于 2019-03-05 01:46:12
发布于 2019-03-05 01:46:12
1.3K0
举报
文章被收录于专栏:悟空被FFmpeg玩悟空被FFmpeg玩

点击(此处)折叠或打开

  1. /**************************************************
  2. * example5.c
  3. * Author: T-bagwell
  4. *
  5. * Compile:gcc -Wall example5.c -o example5
  6. *************************************************/
  7. #include <stdio.h>
  8. #include <unistd.h>
  9. #include <sys/types.h>
  10. #include <sys/stat.h>
  11. #include <fcntl.h>
  12. #include <linux/fb.h>
  13. #include <errno.h>
  14. #include <sys/mman.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <sys/ioctl.h>
  18. #include <jpeglib.h>
  19. #include <jerror.h>
  20. int print_screen(short *buf,int width,int height);
  21. void draw_hline(short *buffer,int x,int y,int maxy,int maxx);
  22. char *fb_addr;
  23. unsigned int fb_width;
  24. unsigned int fb_height;
  25. unsigned int fb_depth;
  26. unsigned fb_size;
  27. unsigned short PIXELRGB888TO565(unsigned char red, unsigned char green, unsigned char blue)
  28. {
  29.         unsigned short B = (blue >> 3) & 0x001F;
  30.         unsigned short G = ((green >> 3) << 5) & 0x07E0;
  31.         unsigned short R = ((red >> 3) << 11) & 0xF800;
  32.         return (unsigned short) (R | G | B);
  33. }
  34. int draw_pixel(void *fbmem, int width, int height, int x, int y, unsigned short color)
  35. {
  36. if ((x > width) || (y > height))
  37.                 return -1;
  38.         unsigned short *dst = ((unsigned short *) fbmem + y * width + x);
  39. *dst = color;
  40.         return (0);
  41. }
  42. int main(int argc, char *argv[])
  43. {
  44. int screen_fbd=0;
  45.         struct jpeg_decompress_struct cinfo;
  46.         struct jpeg_error_mgr jerr;
  47.         FILE *infile;
  48.         struct fb_fix_screeninfo fb_fix;
  49.         struct fb_var_screeninfo fb_var;
  50.         char *env=NULL;
  51.         unsigned char *buffer;
  52.         unsigned char *fbmem;
  53.         short *color_white;
  54.         unsigned short color;
  55.         unsigned int x;
  56.         unsigned int y;
  57. if ((infile = fopen(argv[1], "rb")) == NULL)
  58. {
  59.                 fprintf(stderr, "open bbs.chinaffmpeg.com 孙悟空提醒您 %s failed\n", argv[1]);
  60. exit(-1);
  61. }
  62. if(!(env = getenv("FRAMEBUFFER")))
  63. {
  64.                 env = "/dev/fb0";
  65. }
  66.         screen_fbd = open(env, O_RDWR);
  67. if(screen_fbd < 0)
  68. {
  69.                 return 0;
  70. }
  71. if(ioctl(screen_fbd, FBIOGET_VSCREENINFO, &fb_var) == -1)
  72. {
  73.                 close(screen_fbd);
  74.                 return 0;
  75. }
  76.         fb_width = fb_var.xres;
  77.         fb_height = fb_var.yres;
  78.         fb_depth = fb_var.bits_per_pixel;
  79.         cinfo.err = jpeg_std_error(&jerr);
  80.         jpeg_create_decompress(&cinfo);
  81.         jpeg_stdio_src(&cinfo, infile);
  82.         jpeg_read_header(&cinfo, TRUE);
  83.         jpeg_start_decompress(&cinfo);
  84. if ((cinfo.output_width > fb_width) ||(cinfo.output_height > fb_height))
  85. {
  86.                 return (-1);
  87. }
  88.         fbmem = mmap(0, fb_width * fb_height, PROT_READ | PROT_WRITE, MAP_SHARED, screen_fbd, 0);
  89.         buffer = (unsigned char *) malloc(cinfo.output_width * cinfo.output_components);
  90.         y = 0;
  91. while (cinfo.output_scanline < cinfo.output_height)
  92. {
  93.                 jpeg_read_scanlines(&cinfo, &buffer, 1);
  94. if (fb_depth == 16)
  95. {
  96. for (x = 0; x < cinfo.output_width; x++)
  97. {
  98.                                 color = PIXELRGB888TO565(buffer[x * 3], buffer[x * 3 + 1], buffer[x * 3 + 2]);
  99.                                 draw_pixel(fbmem, fb_width, fb_height, x, y, color);
  100. }
  101. }
  102.         y++;
  103. }
  104.         jpeg_finish_decompress(&cinfo);
  105.         jpeg_destroy_decompress(&cinfo);
  106.         free(buffer);
  107.         return 0;
  108. }

QQ群里突然有人问了这个问题,希望得到开源的程序,正好以前写过一个,找的挺费劲的,就贴到这里吧 http://bbs.chinaunix.net/forum.php?mod=redirect&goto=findpost&ptid=2021099&pid=14296454&fromuid=11344913

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014/08/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel表格中最经典的36个小技巧,全在这儿了
技巧1、单元格内强制换行 技巧2、锁定标题行 技巧3、打印标题行 技巧4、查找重复值 技巧5、删除重复值 技巧6、快速输入对号√ 技巧7、万元显示 技巧8、隐藏0值 技巧9、隐藏单元格所有值。 技巧10、单元格中输入00001 技巧11、按月填充日期 技巧12、合并多个单元格内容 技巧13、防止重复录入 技巧14、公式转数值 技巧15、小数变整数 技巧16、快速插入多行 技巧17、两列互换 技巧18、批量设置求和公式 技巧19、同时查看一个excel文件的两个工作表。 技巧20:同时修改多个工作表 技巧21:恢复未保存文件 技巧22、给excel文件添加打开密码 技巧23、快速关闭所有excel文件 技巧24、制作下拉菜单 技巧25、二级联动下拉 技巧27、删除空白行 技巧28、表格只能填写不能修改 技巧29、文字跨列居中显示 技巧30、批注添加图片 技巧31、批量隐藏和显示批注 技巧32、解决数字不能求和 技巧33、隔行插入空行 技巧34、快速调整最适合列宽 技巧35、快速复制公式 技巧36、合并单元格筛选
统计学家
2019/09/25
8.3K0
Excel表格中最经典的36个小技巧,全在这儿了
Excel 常用的九十九个技巧 Office 自学教程快速掌握办公技巧
Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测,并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能,它已成为国内外广大用户管理公司和个人财务、统计数据、绘制各种专业化表格的得力助手。允许用户自定义界面的电子制表软件包括字体、文字属性和单元格格式,它还引进了智能重算的功能,当单元格数据变动时,只有与之相关的数据才会更新,荒岛本次带来九十九个 Excel 技巧,提高您的办公效率。
ximagine
2023/05/05
7.5K0
商业数据分析从入门到入职(2)Excel基础
Excel不仅仅只是存放数据的工具,其功能特别强大,甚至可以做出美观的仪表盘,如下:
cutercorley
2020/09/15
1.5K0
商业数据分析从入门到入职(2)Excel基础
吐槽下Excel的十大不规范使用问题
太多的人觉得每个月一个表格存放数据,一年12个月,一个工作薄文件里放12个工作表,然后还有大量的插件批量生成工作表,批量重命名工作表、工作表排序等一系列的功能来辅助完成这些提速性工作。
Excel催化剂
2021/08/19
1.3K0
个人永久性免费-Excel催化剂插件功能修复与更新汇总篇之六
原链接:https://www.jianshu.com/p/273108804cef
Excel催化剂
2021/08/19
7870
Excelize 2.2.0 发布, Go 语言 Excel 基础库
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2018 开源中国码云 Gitee 最有价值开源项目 GVP,目前已成为 Go 语言最受欢迎的 Excel 文档基础库。
xuri
2020/05/11
2.4K0
Excelize 2.2.0 发布, Go 语言 Excel 基础库
玩转Excel,一定要懂点儿运行逻辑和结构
Excel是以单元格为最小维度构建起来的,当我们打开Excel时,呈现在我们面前的就是一个个单元格。 Excel的所有功能基本上都是围绕单元格进行的。有时单元格里放的是一条条数据,有时放的是各种功能的函数与公式;有时我们需要对单元格进行筛选和排序,有时又需要对单元格进行合并;有时需要对单元格设置不同的格式,有时需要利用单元格中的数据进行数据分析及可视化操作。 大家有没有想过Excel是怎么存储和调用单元格中的各项数据、格式和不同的操作的? 简单地说,在Excel底层,刚才描述的所有针对Excel的操作或者存
博文视点Broadview
2022/04/15
1.4K0
玩转Excel,一定要懂点儿运行逻辑和结构
Excelize 2.7.0 发布, 2023 年首个更新
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2020 Gopher China - Go 领域明星开源项目(GSP)、2018 年开源中国码云最有价值开源项目 GVP (Gitee Most Valuable Project),目前已成为 Go 语言最受欢迎的 Excel 文档基础库。
xuri
2023/01/09
1.8K0
Excelize 2.7.0 发布, 2023 年首个更新
20个Excel操作技巧,提高你的数据分析效率
今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区
数据猿
2019/08/06
2.5K0
数据分析常用的Excel函数合集(上)
Excel是我们工作中经常使用的一种工具,对于数据分析来说,这也是处理数据最基础的工具。
朱小五
2020/03/06
3.2K0
数据分析常用的Excel函数合集(上)
Excel表格的35招必学秘技[配图]
一、让数据按需排序   如果你要将员工按其所在的部门进行排序,这些部门名称既的有关信息不是按拼音顺序,也不是按笔画顺序,怎么办?可采用自定义序列来排序。   1.执行“格式→选项”命令,打开“选项”
ytkah
2018/03/06
7.8K0
Excel表格的35招必学秘技[配图]
个人永久性免费-Excel催化剂功能第44波-可见区域复制粘贴不覆盖隐藏内容
原文在简书上发表,再同步到Excel催化剂微信公众号或其他平台上,文章后续有修改和更新将在简书上操作, 其他平台不作同步修改更新,因此建议阅读其他出处的文章时,尽可能跳转回简书平台上查看。
Excel催化剂
2021/08/19
4.5K0
Excel基础
根据用户提供的文章内容,撰写摘要总结。
张果
2018/01/04
2.7K0
Excel基础
Excel催化剂100+大主题功能梳理导读
在100+的主题功能中,以下将尝试通过几个维度来作简单的梳理,希望能够对初次接触的朋友们可以更加清晰地了解Excel催化剂能够给自己的日常工作带来哪些的便利和帮助。
Excel催化剂
2021/08/19
3K0
能够提升Office三件套办公效率的工具箱-星泽V社
Office办公三件套——Excel、PowerPoint、Word,如果有了今天介绍的这三个插件,办公效率将会得到很大的提高。之前很多人说Office没有WPS的一些小功能人性化,那么我们来看一下这几个插件到底有多强大?
星泽V社
2022/04/11
1.1K0
能够提升Office三件套办公效率的工具箱-星泽V社
工作中必会的57个Excel小技巧
为了方便同学们学习和收藏,兰色把工作中最常用、最简捷的小技巧进行一次整理,共57个。希望对同学们有所帮助。
一朵灼灼华
2022/08/05
4.2K0
个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容
Excel催化剂已正式在千聊上发布视频,如查阅文章有理解障碍,不妨查看下视频,视频不定期更新,内容丰富,干货满满,有术亦有道!
Excel催化剂
2021/08/19
1K0
个人永久性免费-Excel催化剂功能第74波-批量排版格式利器,瞬间美化表格
其控制的颗粒度达到单元格级别,就如一张大画布,横竖画上格子线,任意发挥,所以有网传某某人用Excel来作画的惊艳之举(当然不一定最佳的使用场景,有比Excel更能胜任的专业绘画软件)。
Excel催化剂
2021/08/19
1.2K0
Excel 基础篇
Excel 2010是一款功能强大、方便灵活、使用快捷的电子表格制作软件,可用来创建数据表格:还可以利用公式或函数对所输入的数据进行计算...
技能锦囊
2020/04/14
2.4K0
Excelize 发布 2.6.1 版本,支持工作簿加密
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2020 Gopher China - Go 领域明星开源项目(GSP)、2018 年开源中国码云最有价值开源项目 GVP (Gitee Most Valuable Project),目前已成为 Go 语言最受欢迎的 Excel 文档基础库。
xuri
2022/08/22
1.4K0
Excelize 发布 2.6.1 版本,支持工作簿加密
推荐阅读
相关推荐
Excel表格中最经典的36个小技巧,全在这儿了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档