frame buffer编程--画点功能和新增字符串代替RGBT

(一):写在前面

这一次进行了一个比较大的迭代,在这里我先把相对于上一个版本的改进做一个解释:

  • 1:进一步完善画点,增加了使用字符串代替RGBT值
  • 2:实现字符串解析出RGBT值
  • 3:增加了画圆的算法
  • 4:进一步增强了代码注释

这四个点是这一节实现的主要内容.这样的修改为下面进一步的实现提供了方便.

(二):功能介绍

首先我做的是把颜色相关的代码单独分离开来,新增加一个color.h文件,专用于颜色相关的操作和属性表示.下面就是对画点,画线,和画圆的进一步增强.

1:画点的进一步增强

在画点的时候,之前都是使用结构体POINT来代替点的位置,但是,平时我们在使用的时候,比较方便的就是直接指定点的x,y值,所以,我首先增加了指定点的x,y值来画点.

/** 该函数用于指定点的横坐标,纵坐标的值来画点* @param pFbdev    参考结构体 fbdev* @param x         点的坐标对应的横坐标的值* @param y         点的坐标对应的纵坐标的值* @param r         颜色对应的R值 * @param g         颜色对应的G值* @param b         颜色对应的B值*/
void draw_x_y_dot(PFBDEV pFbdev,int x,int y,uint8_t r,uint8_t g,uint8_t b);

另一方面,之前无论是在画点,画线还是画其他形状的时候,我们都仅仅是指定他们颜色的RGB值,但是没有对透明度的指定,所以,在这里,我又新增了一个指定透明度来画点的实现.

/** 该函数用于实现画点,不过在这个函数中需要设定透明度参数* @param pFbdev    参考结构体 fbdev* @param p         点的坐标* @param r         颜色对应的R值* @param g         颜色对应的G值* @param b         颜色对应的B值* @param t         颜色对应的透明度值* @return void*/
void draw_dot_with_trans(PFBDEV pFbdev,POINT p,uint8_t r,uint8_t g,uint8_t b,uint8_t t);

还有就是把指定透明度和指定x,y值相结合实现一个画点的函数实现.

/** 该函数用于指定点的横坐标,纵坐标的值,并且必须指明透明度来画点* @param pFbdev    参考结构体 fbdev* @param x         点的坐标对应的横坐标的值* @param y         点的坐标对应的纵坐标的值* @param r         颜色对应的R值 * @param g         颜色对应的G值* @param b         颜色对应的B值* @param t         颜色对应的透明度值*/
void draw_x_y_dot_with_trans(PFBDEV pFbdev,int x,int y,uint8_t r,uint8_t g,uint8_t b,uint8_t t);

后面又增加了一些别的画点的函数,包括在RGBT结构体中指定透明度啊等等函数.这里不再赘余.

2:字符串代表颜色

在我们的程序中,我们可以知道,无论是颜色的RGBT值,都是使用uint8_t作为其类型的.也就是8为的正整形数字.我们可以使用两个16进制数来表示8位,例如0xff,转换成二进制数就是11111111.这样就能代表颜色了.对于RGBT都是这样表示,所以,我们使用”FFFFFFFF”来表示RGBT很合适.

下面这个代码是我将字符串转换成RGBT的算法,这个算法现在我感觉很不好,后期还需要修改.

RGBT getRGBT(const char *temp){RGBT rgbt;  char *c_tmp;c_tmp = (char *)malloc(4 * sizeof(int));c_tmp[0] = '0';c_tmp[1] = 'x';int r,g,b,t;//RGBT值的计算c_tmp[2] = temp[0];c_tmp[3] = temp[1];r = strtol(c_tmp,NULL,16);c_tmp[2] = temp[2];c_tmp[3] = temp[3];g = strtol(c_tmp,NULL,16);c_tmp[2] = temp[4];c_tmp[3] = temp[5];b = strtol(c_tmp,NULL,16);c_tmp[2] = temp[6];c_tmp[3] = temp[7];t = strtol(c_tmp,NULL,16);rgbt.r = r;rgbt.g = g;rgbt.b = b;rgbt.t = t;return rgbt;
}

这样,以后就可以方便的时候字符串来代替RGBT值了.

3:画圆的实现

画圆的实现比较简单,就是使用方程式:

(xa)2+(yb)2=c2

这样,我们已经知道圆的中心点(a,b),还有圆的半径R了.那么我们就可以使用上面的公式将圆画出来.

//画圆
void draw_circle(PFBDEV pFbdev,int x,int y,int radius,const char *color)
{double i;int tmp;for(i = x - radius; i < x + radius;i+=0.01){tmp = sqrt(radius * radius - (i - x) * (i - x));draw_x_y_color_dot_with_string(pFbdev,i,(tmp + y),color);draw_x_y_color_dot_with_string(pFbdev,i,(-tmp + y),color);}
}

注意 i+= 0.01 这个地方,如果将0.01换成别的,会有不一样的效果,大家如果有兴趣可以尝试一下.

(三):后期规划

在后面的时候,我们将画点,画线,画各种图形分开来,正确实现一个在命令行界面下的一个小型的图形库.主要是为了好玩,有趣.

(四):写在后面

生活的乐趣就是充满了很多不定因素.

加菲

大家可以登陆我的github下载源码:

github地址

转载于:https://www.cnblogs.com/bobo1223/p/7287506.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这篇博士毕业论文致谢句句诛心......

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;学术志综合自小木虫、网络等&#xff0c;作者yechm AUT博士毕业论文感谢信&#xff1a;我出生的时候是一个下雪的深夜&#xff0c;我的父亲在床边生了一堆柴火&#xff0c;我的母亲躺在四周漏风的那间破屋角落的床上…

30分钟通过Kong实现.NET网关

什么是KongOpenrestry是一个基于Nginx与Lua的高性能平台&#xff0c;内部有大量的Lua库。其中ngx_lua_moudule使开发人员能使用Lua脚本调用Nginx模块。Kong是一个Openrestry程序&#xff0c;而Openrestry运行在Nginx上&#xff0c;用Lua扩展了nginx。所以可以认为Kong Openres…

Proxy模式简介和用例

在软件系统中&#xff0c;有些对象有时候由于某些原因&#xff08;比如对象创建开销很大&#xff0c;或者某些操作需要安全控制&#xff0c;或者需要进程外的访问&#xff09;&#xff0c;如果直接访问会给使用者或者系统结构带来很多麻烦&#xff0c;这时可以在客户程序和目标…

struts2中jsp页面上验证码的生成

如何在jsp页面中显示验证码&#xff1a; 验证码&#xff1a;<img class"yzm_img" align"middle" id"validateImage" src"p_w_picpathCode.action" width"150" height"40" οnclick"this.srcp_w_picpathCo…

挑战程序设计竞赛部分题目选择排序、二分查找找出下标、深度优先算法、求三角形max周长、蚂蚁算法、操作excel

首先提供帮助类 可能这个类还需要更新 、求最大值、求最小值、选择排序、二分查找找出下标、二分查找排好序列里面是否有那个值 public class Util {//求最大值public static int maxValue(int a,int b) {int max =0;if (a > b) {max = a;} else {max = b;}return max;}//求…

nginx php oracle,第8天 ORACLE安装及NGINX整合PHP环境

oracle 11g安装在centos5.9x64下过程1.先检查是否安装开发工具、JAVA、ksh等&#xff0c;及其它如下yum search检查&#xff0c;若没有安装&#xff0c;则用yum groupinstall 开发工具 开发库 Java开发yum install pdkshyum install sysstatyum install libaio-develyum insta…

这个小姐姐真的很火辣......

1 穿着十分火辣的美女...▼2 你还有理了&#xff1f;▼3 学生&#xff1a;我们要把老师照片挂墙上&#xff01;▼4 喜悦中带着阵阵悲伤...▼5 你瞅啥&#xff1f;瞅你咋地&#xff01;▼6 一时竟没发现哪里不对▼7 老板&#xff0c;我们KTV最漂亮的都在这了▼你点的每个赞…

RPC调用框架比较分析

什么是RPC&#xff1a; RPC&#xff08;Remote Procedure Call Protocol&#xff09;——远程过程调用协议&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 简言之&#xff0c;RPC使得程序能够像访问本地系统资源一样&am…

VS扩展CodeMaid代码整理插件

CodeMaid是Visual Studio的开源扩展&#xff0c;用于清理和简化我们的C&#xff03;&#xff0c;C &#xff0c;F&#xff03;&#xff0c;VB&#xff0c;PHP&#xff0c;PowerShell&#xff0c;JSON&#xff0c;XAML&#xff0c;XML&#xff0c;ASP&#xff0c;HTML&#xff0…

hibernate中的id特殊属性hilo剖解(多用于继承关系)

hilo是hibernate中最长用的一种生成方式&#xff0c;hibernate给出了hilo 和 seqhilo两种生成器&#xff0c;他们的分别向下面一样配置 Hilo配置代码 <id name"id" type"int" column"id"> <generator class"hilo"> <…

Centos5 install vnc

2019独角兽企业重金招聘Python工程师标准>>> 很详细的install steps: http://wiki.centos.org/HowTos/VNC-Server#head-76401321dae4d80916a7fd7e710272a9b85c9485 ---------------------------------------------------------------------------------------------…

搜索引擎(lucene)

专辑&#xff1a;Lucene (全文检索工具)从入门到精通简介:Lucene是apache软件基金会4 jakarta项目组的一个子项目&#xff0c;是一个开放源代码的全文检索引擎工具包&#xff0c;即它不是一个完整的全文检索引擎&#xff0c;而是一个全文检索引擎的架构&#xff0c;提供了完整的…

自动摘要php,修改DEDECMS文章自动摘要长度或者取掉文章摘要

首先&#xff0c;应该在系统→系统基本参数→其它选项“自动摘要长度” 中可以设置&#xff0c;但最高只能实现250&#xff0c;根本没用&#xff0c;所以现在总结一下几种方法方法一&#xff1a;第一步进数据库 找到表 dede_archives 下的字段 description 点更改,修改长度 或 …

解决PKIX:unable to find valid certification path to requested target 的问题

问题的根本是&#xff1a; 缺少安全证书时出现的异常。 解决问题方法&#xff1a; 将你要访问的webservice/url....的安全认证证书导入到客户端即可。 以下是获取安全证书的一种方法&#xff0c;通过以下程序获取安全证书&#xff1a; /** Copyright 2006 Sun Microsystems, In…

北大学霸隐居20年,王青松花光350万后,如今怎么样了?

全世界只有3.14 % 的人关注了爆炸吧知识传说我国&#xff0c;本科生遍地走&#xff0c;研究生多如狗。但一估算&#xff0c;从1977年高考恢复以来&#xff0c;国内现在的本科率竟然还不到5%。这样一想&#xff0c;30多年前的本科生数量肯定更少&#xff0c;也更珍贵。如果是北大…

如何在 Dapper.NET 中使用事务?

咨询区 Amit&#xff1a;我的项目中使用 dapper.net 做数据库连接框架&#xff0c;有一个需求需要在多个表上执行多次插入操作&#xff0c;我想把它 事务化&#xff0c;但我看 dapper 并没有提供类似的方式。请问我该如何使用 dapper 来做这项工作呢&#xff1f;回答区 Newteq …

文件给制实施规定的实例(GB8567-88)

尽管在文件编制中存在着很多灵活性&#xff0c;然而&#xff0c;文件的编制确实是非常必要的&#xff0c;其意义如前所述。为了控制这种灵活性&#xff0c;保证文件编制能达到应该达到的目的&#xff0c;对于具体的软件开发任务&#xff0c;应编制的文件的种类、详细程度应取决…

python 内存数据库下载,Python 文件存储和数据库

Python 中数据存储的方式和其他语言没什么区别&#xff0c;主要分为两个方面&#xff1a;文件存储和数据库存储。文件存储文件存储的方法也分为很多种&#xff0c;主要包括&#xff1a;Python 内置方法NumPy 模块方法os 模块方法csv 模块方法Python 内置方法在不需要借助任何外…

c#10中的namespace

A、namespace是c#用来管理类型隔离的关键字&#xff0c;在不同的namespace下可以相同名称的类型&#xff0c;并且namespace是可以嵌套的。Demo01.csnamespace NameSpaceDemo {internal class Demo01Class{ }namespace NSDemo01{internal class Demo01Class{}}namespace NSDemo…

岛国小姐姐来例假时,男朋友背着她偷偷查手机......

1 大猪蹄子们都好好学学▼2 人形扫地机&#xff1f;&#xff1f;&#xff1f;▼3 妈&#xff0c;看下你儿子大学四年积攒的宝藏▼4 你以为养老院很无聊&#xff1f;▼5 这个事是全世界统一的吗&#xff1f;▼6 爸爸&#xff1a;今天做个温柔的人吧▼7 那些隐藏在民间的车…