0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【开鸿智谷NiobeU4开发板免费试用体验】LVGL移植前菜篇-程序员就要晚点有艺术的(生成艺术图片)

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-10-14 15:33 次阅读

本文来源电子发烧友社区,作者:李先生, 帖子地址:https://bbs.elecfans.com/jishu_2307400_1_1.html


前言

话说没有艺术细胞的程序员不是好码农!

上一次我们进行了LCD的刷屏测试,我们觉得太单调了,程序员就应该玩点有艺术性的。这次我们使用LCD点阵画出各类具有艺术性的图像。

参见https://codegolf.stackexchange.com/

代码

有用到浮点算数运算,需要包含算术库

#include

代码如下

//图片尺寸:

#define DIM 130

//图片尺寸-1

#define DM1 (DIM-1)

#define _sq(x) ((x)*(x))                           // 平方

#define _cb(x) abs((x)*(x)*(x))                    // 立方的绝对值

#define _cr(x) (unsigned short)(pow((x),1.0/3.0))  // 立方根

 

unsigned char RD(int i,int j){

return (char)(_sq(cos(atan2(j-65,i-65)/2))*255);

}

 

unsigned char GR(int i,int j){

return (char)(_sq(cos(atan2(j-65,i-65)/2-2*acos(-1)/3))*255);

}

 

unsigned char BL(int i,int j){

return (char)(_sq(cos(atan2(j-65,i-65)/2+2*acos(-1)/3))*255);

}

 

unsigned char RD0(int i,int j)

{

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return ((int)((i+DIM)*s+y)%2+(int)((DIM*2-i)*s+y)%2)*127;

}

 

unsigned char GR0(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return ((int)(5*((i+DIM)*s+y))%2+(int)(5*((DIM*2-i)*s+y))%2)*127;

}

 

unsigned char BL0(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return ((int)(29*((i+DIM)*s+y))%2+(int)(29*((DIM*2-i)*s+y))%2)*127;

}

 

unsigned char RD1(int i, int j) {

#define r(n)(rand()%n)

    static char c[DIM][DIM]; return!c[i][j] ? c[i][j] = !r(999) ? r(256) : RD((i + r(2)) % 1024, (j + r(2)) % 1024) : c[i][j];

}

unsigned char GR1(int i, int j) {

    static char c[DIM][DIM]; return!c[i][j] ? c[i][j] = !r(999) ? r(256) : GR((i + r(2)) % 1024, (j + r(2)) % 1024) : c[i][j];

}

unsigned char BL1(int i, int j) {

    static char c[DIM][DIM]; return!c[i][j] ? c[i][j] = !r(999) ? r(256) : BL((i + r(2)) % 1024, (j + r(2)) % 1024) : c[i][j];

}

 

unsigned char RD2(int i, int j) {

    static double k; k += rand() / 1. / 0x7FFF; int l = k; l %= 512; return l > 255 ? 511 - l : l;

}

unsigned char GR2(int i, int j) {

    static double k; k += rand() / 1. / 0x7FFF; int l = k; l %= 512; return l > 255 ? 511 - l : l;

}

unsigned char BL2(int i, int j) {

    static double k; k += rand() / 1. / 0x7FFF; int l = k; l %= 512; return l > 255 ? 511 - l : l;

}

 

unsigned char RD3(int i, int j) {

    return (unsigned char)sqrt((double)(_sq(i - DIM / 2) * _sq(j - DIM / 2)) * 2.0);

}

unsigned char GR3(int i, int j) {

    return (unsigned char)sqrt((double)(

        (_sq(i - DIM / 2) | _sq(j - DIM / 2)) *

        (_sq(i - DIM / 2) & _sq(j - DIM / 2))

        ));

}

unsigned char BL3(int i, int j) {

    return (unsigned char)sqrt((double)(_sq(i - DIM / 2) & _sq(j - DIM / 2)) * 2.0);

}

 

unsigned char RD4(int i, int j) {

    static int r[DIM]; int p = rand() % 9 - 4; r[i] = i & r[i] ? (r[i] + r[i - 1]) / 2 : i ? r[i - 1] : 512; r[i] += r[i] + p > 0 ? p : 0; return r[i] ? r[i] < DIM ? r[i] : DM1 : 0;

}

unsigned char GR4(int i, int j) {

    static int r[DIM]; int p = rand() % 7 - 3; r[i] = i & r[i] ? (r[i] + r[i - 1]) / 2 : i ? r[i - 1] : 512; r[i] += r[i] + p > 0 ? p : 0; return r[i] ? r[i] < DIM ? r[i] : DM1 : 0;

}

unsigned char BL4(int i, int j) {

    static int r[DIM]; int p = rand() % 15 - 7; r[i] = i & r[i] ? (r[i] + r[i - 1]) / 2 : i ? r[i - 1] : 512; r[i] += r[i] + p > 0 ? p : 0; return r[i] ? r[i] < DIM ? r[i] : DM1 : 0;

}

 

void StartHdfSPITest(void)

{

    static uint16_t gcolor = 0xFFFF;

    LcdInit();

    while (1) {

        for(int i=0;ifor(int j=0;jstatic unsigned short color[3];

                color[0] = RD(i,j)&255;

                color[1] = GR(i,j)&255;

                color[2] = BL(i,j)&255;

                uint16_t c = (color[0]>>3) << 11;

                c |= (color[1]>>2) << 5;

                c |= (color[2]>>3) << 0;

                lcd_draw_point(i,j,c);

            }

        }

        LcdPush();

        LOS_Msleep(2000);

 

        for(int i=0;ifor(int j=0;jstatic unsigned short color[3];

                color[0] = RD1(i,j)&255;

                color[1] = GR1(i,j)&255;

                color[2] = BL1(i,j)&255;

                uint16_t c = (color[0]>>3) << 11;

                c |= (color[1]>>2) << 5;

                c |= (color[2]>>3) << 0;

                lcd_draw_point(i,j,c);

            }

        }

        LcdPush();

        LOS_Msleep(2000);

 

        for(int i=0;ifor(int j=0;jstatic unsigned short color[3];

                color[0] = RD2(i,j)&255;

                color[1] = GR2(i,j)&255;

                color[2] = BL2(i,j)&255;

                uint16_t c = (color[0]>>3) << 11;

                c |= (color[1]>>2) << 5;

                c |= (color[2]>>3) << 0;

                lcd_draw_point(i,j,c);

            }

        }

        LcdPush();

        LOS_Msleep(2000);

 

        for(int i=0;ifor(int j=0;jstatic unsigned short color[3];

                color[0] = RD3(i,j)&255;

                color[1] = GR3(i,j)&255;

                color[2] = BL3(i,j)&255;

                uint16_t c = (color[0]>>3) << 11;

                c |= (color[1]>>2) << 5;

                c |= (color[2]>>3) << 0;

                lcd_draw_point(i,j,c);

            }

        }

        LcdPush();

        LOS_Msleep(2000);

 

        for(int i=0;ifor(int j=0;jstatic unsigned short color[3];

                color[0] = RD4(i,j)&255;

                color[1] = GR4(i,j)&255;

                color[2] = BL4(i,j)&255;

                uint16_t c = (color[0]>>3) << 11;

                c |= (color[1]>>2) << 5;

                c |= (color[2]>>3) << 0;

                lcd_draw_point(i,j,c);

            }

        }

        LcdPush();

        LOS_Msleep(2000);

    }

}
;j++)>;i++)>;j++)>;i++)>;j++)>;i++)>;j++)>;i++)>;j++)>;i++)>

效果

image.png

image.png

image.png

image.png

总结

代码中有大量的浮点运算,本身也可以作为CPU性能的一个对比测试,同时也可以测试刷屏的速率。从效果来看CPU的性能是不错的,刷频效果也可以,后面就正式开始LVGL的移植了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开鸿智谷
    +关注

    关注

    2

    文章

    90

    浏览量

    880
  • NiobeU4
    +关注

    关注

    3

    文章

    31

    浏览量

    442
收藏 人收藏

    评论

    相关推荐

    【飞腾派4G版免费试用】鸿蒙系统的各种报错,让程序员差点.............

    开源这一块,但是大部分的程序员还是停留在生计问题,有时间精力投入到给开源添砖加瓦的还是比较少,这或许就是开源与程序员的矛盾。 8、好多指令都缺,用起来完全不习惯,好多东西需要自己去
    发表于 12-13 15:09

    LVGL案例分享--手把手教你移植到T113-i国产工业开发板

    龙科技的T113-i的开发板上。 LVGL LVGL,全名“Littlev Graphics Library”,是一个开源的图形库,主要用于在嵌入式系统上创建图形用户界面(GUI)。它是用C语言编写
    发表于 11-17 09:55

    【新品体验】先楫HPM5361EVK开发板免费试用

    : 1.本次试用不包含拉票环节。 2.产品试用结束后,完整参与试用,可免费获得开发板。(试用报告
    发表于 10-20 11:30

    把您的 PCB 艺术品带来 KiCon 吧

    “ 每位工程师都是艺术家;每次会议都应该有属于自己的徽章。让您的作品在 KiCon Asia 闪亮!** ”** 图片引用自 HACKADAY 2023 KiCon Asia 报名通道已经开启
    发表于 10-20 10:43

    OpenHarmony开发板汇总

    NiobeU4(ESP32-U4WDH)轻量系统:鸿Niobe 407(STM32F407IGT6)轻量系统:朗国IoT WiFi
    发表于 10-19 11:27

    轻量系统:鸿NiobeU4(ESP32-U4WDH)

    开发板名称(芯片型号) 鸿NiobeU4(ESP32-U4WDH) 芯片架构 xtensa
    发表于 10-19 11:23

    轻量系统:鸿Niobe 407(STM32F407IGT6)

    开发板名称(芯片型号) 鸿Niobe 407(STM32F407IGT6) 芯片架构 CST85F01 CPU频率 介绍(字数请控制在200字以内) Niobe 407
    发表于 10-19 11:22

    鸿鸿OS设备开发实验箱通过OpenHarmony兼容性测评

    ,实验箱还提供4个综合智能场景,高校老师在教学时可自由组合多个案例模块,开发更丰富、更有趣的互动场景。 鸿依托OpenHarmony
    发表于 10-19 10:14

    OpenHarmony应用分发运营体系

    一、分发流程 图片来源:OpenHarmony官网 二、主要途径 更多 鸿鸿OS 开发板
    发表于 09-21 15:27

    免费试用】紫光同创PGL50H开发平台,高性能国产FPGA,盘古50K开发板试用活动火热征集中!

    开发板免费试用活动,欢迎FPGA应用开发者、高校师生和研究人员踊跃报名,申请试用! 扫描报名二维码即可立即报名! *扫码报名参与
    发表于 08-21 16:16

    【Milk-V Duo 开发板免费体验】4-Linux控制小车动作(原创)首发

    接上三: [接上两:【Milk-V Duo 开发板免费体验】3-Linux控制小车方向https://bbs.elecfans.com/jishu_2371135_1_1.html
    发表于 08-21 02:11

    移植ARM DHCP服务器版本1程序员指南

    这本书由ARM DHCP服务器服务器软件提供, 假定ARM DHCP服务器移植源可以作为参考, 也假设您可以访问程序员的 C 和 ARM 组装语言指南。 本程序员指南是为经验的内嵌系
    发表于 08-18 06:46

    从评论中生成艺术的开源项目

    电子发烧友网站提供《从评论中生成艺术的开源项目.zip》资料免费下载
    发表于 07-05 11:06 0次下载
    从评论中<b class='flag-5'>生成</b><b class='flag-5'>艺术</b>的开源项目

    【正点原子STM32战舰V4开发板体验】第二弹,lvgl显示移植

    1,接上篇: 【正点原子STM32战舰V4开发板体验】开发板使用rtthread系统体验,上篇我们通过rt-studio成功建立了基于战舰V4开发
    发表于 05-18 00:37

    基于ESP32芯片,搭载OpenHarmony操作系统,NiobeU4开发板应用实例

    性能、稳定性、通用性和可靠性,以及超低的功耗,适用于各种应用场景。 1.开箱体验编译环境搭建及烧录 感谢开鸿智谷和电子发烧友寄来的中秋礼物,下面给大家做个NiobeU4开发板开箱体验,祝大家中秋快乐! 此次收到的NiobeU4
    的头像 发表于 05-11 20:16 2004次阅读
    基于ESP32芯片,搭载OpenHarmony操作系统,<b class='flag-5'>NiobeU4</b><b class='flag-5'>开发板</b>应用实例