6595|7

7815

帖子

56

TA的资源

裸片初长成(中级)

楼主
 

【EGE+SKIA】持续更新:在PC上验证2D图形库SKIA [复制链接]

本帖最后由 辛昕 于 2017-12-8 00:58 编辑

     osc git上的 仓库地址:
链接已隐藏,如需查看请登录或者注册


     log:2017.12.8
       暂时放弃skia,使用agg-2.5这个源码的编译是很简单的。
       今天的commit里同时包含了 skia,agg源码。
       项目中去掉了skia,编译了agg,但是测试用的agg_test.cpp中的例子仍未做到利用ege模拟出来的lcd显示出预期的效果,
主要是因为今晚困了。
2017.12.6
        对我来说,现在编译skia始终还是有些复杂。(考虑到它官方资料里提示用的是clang)
        我想重新回到AGG再试试。
        但首先我需要对想实现一个怎样的GUI做一个简单的描述:       额...又忘了,把那个rgb16的效果图贴上来...........
2017.12.5
        早上醒来怀疑那个rgb16的转换函数可能有错。待验证,不应该色差相差这么大的。
        验证并没有错,怀疑和图片的颜色有关?
2017.12.5
        利用画点函数,可以和MCU上画LCD的方式画图片。
        最近的一次commit已经增加了支持rgb16 rgb24 rgb32的颜色格式支持。
        PS:不得不说,突然发现,rgb24到rgb16损失的颜色实在是很巨大,超乎自己想象。

2017.11.28

        只是完成了一个基本的显示图片文件的小demo。(代码很简单,所以目前全部放在main.cpp里)      

此内容由EEWORLD论坛网友辛昕原创,如需转载或用于商业用途需征得作者同意并注明出处



最新回复

  详情 回复 发表于 2017-12-5 16:44
点赞 关注
个人签名

强者为尊,弱者,死无葬身之地


回复
举报

7815

帖子

56

TA的资源

裸片初长成(中级)

来自 6楼
 

缘由

       最近可能是相对闲了点,昨天我死心不息地想接着搞搞 skia这个2D库。      然而真心的是被 type_traits这个玩意搞死,这当然是之前就知道了的,codeblocks里好好地都在,只是要加一个 --std=c++11而已。而到了mdk里,偏偏怎么都找不到这个 头文件。

      我折腾了好一阵子后,(中间干过 copy 侯捷书里的实现版本,也试过吧codeblocks的复制过去......事实证明,这种小偷小摸的事情是干不了的。)最后差点都要开始研究 type_traits这个头文件的内容了。
      这个时候我肚子饿了,吃饭路上我开始琢磨这件事:最后觉得,我为啥不先在PC上玩玩呢?
      这样有个好处是,以后换了在外面,没有开发板也挺方便啊不是?

      何况,这些东西,只要是在PC上,什么工具没有,什么库没有?
      我至少先看看skia能不能满足我要的所有效果啊?

      然后今天早上回来搜索了一下,最后锁定目标。用ege这个库,可以很简单地实现一个画面——对我来说就算一个粗糙的LCD模拟器了。
至于什么窗口啊界面啊我都不要~~

      更好的是,做起来十分简单,简单到都不用我来写教程。直接复制。
      不过对于网页我总是有点不放心,所以直接copy过来,顺带做做排版好了~~
 
个人签名

强者为尊,弱者,死无葬身之地

 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

沙发
 

一、安装(其实是copy)ege库

本帖最后由 辛昕 于 2017-11-22 10:34 编辑

说明一下:
      由于这个东西,我只是拿来“显示一个LCD屏而已”,我一点都不在意它是什么,也不在意它不通用。
      下载包,你可以在这里找到:
       Easy Graphics Engine – EGE图形库主站

所谓安装其实,就是把它已经做好的lib包,头文件放到你自己的编译器,ide下的环境而已。
把压缩包里include目录下所有文件,复制到编译器安装目录下的include目录内,例如D:\MinGW\include\;4、把lib目录下对应编译器名目录下的文件,复制到编译器安装目录下的lib目录内,例如D:\MinGW\lib\。
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

板凳
 

二、设置codeblocks的 编译环境

1.新建普通的 console application工程就可以;
2.设置链接选项.(直接上图)


然后linker这些库:
添加libgraphics.a,libgdi32.a libimm32.a libmsimg32.a libole32.a liboleaut32.a libwinmm.a libuuid.a
再在右边的other linker options写上 -mwindows
最后你看到的效果大概如下:


至此,OK,是不是很简单!!
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

4
 
最后,这是一个最简单的入门级小例程。
  1. #include "graphics.h"
  2. int main(){
  3. initgraph(640, 480); // 初始化为640*480大小的窗口,这里和TC 略有区别
  4. circle(200, 200, 100); // 画圆,圆心(200, 200),半径100
  5. getch(); // 等待用户按键,按任意键继续
  6. closegraph(); // 关闭图形界面
  7. return 0;
  8. }
复制代码
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

5
 
u will see......


说实话,这是这段时间我第一次,不到10分钟就跑出了一个圆,内心,简直感动..........
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

7
 
本帖最后由 辛昕 于 2017-12-5 10:53 编辑

回头我贴上 rgb16颜色下显示的效果,实在差别有点大。
但仔细研究了一下rgb16拆分 r g b 函数又没看到什么错误。
(当然,末尾的 R3位,G2位,B3位 肯定是损失了)

  1. #include <stdio.h>
  2. #include <stdint.h>       
  3.        
  4. void rgb162color(uint16_t rgb)
  5. {
  6.     uint8_t r,g,b;

  7.     r = (rgb&0xf800)>>8;
  8.     g = (rgb&0x07e0)>>3;
  9.     b = (rgb&0x001f)<<3;
  10.        
  11.         printf("\nR:%02x\tG:%02x\tB:%02x\n",r,g,b);
  12. }

  13. uint16_t color2rgb16(uint8_t r,uint8_t g,uint8_t b)
  14. {
  15.         uint16_t c = 0;
  16.        
  17.         c |= ( r & 0xf8)<<8;
  18.         c |= ( g & 0xfc)<<3;
  19.         c |= ( b & 0xf8)>>3;
  20.        
  21.         return c;
  22. }

  23. #define R(x) (x & 0xf8)
  24. #define G(x) (x & 0xfc)
  25. #define B(x) (x & 0xf8)

  26. #define R_TEST        0xf4
  27. #define G_TEST        0x34
  28. #define B_TEST  0x65
  29.        
  30. int main ()
  31. {
  32.         printf("原始R,G,B分量做了R5,G6,B5截取\n");         
  33.     printf("R=%02x\tG=%02x\tB=%02x\n",R(R_TEST),G(G_TEST),B(B_TEST));
  34.         printf("合成16位色:%04x\n",color2rgb16(R_TEST,G_TEST,B_TEST) );
  35.         printf("拆分回RGB");
  36.        
  37.         rgb162color(color2rgb16(R_TEST,G_TEST,B_TEST));
  38.         return 0;
  39. }
复制代码

 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

626

帖子

173

TA的资源

一粒金砂(高级)

8
 
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表