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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 frame buffer编程--画点功能和新增字符串代替RGBT 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(一):寫在前面

這一次進(jìn)行了一個(gè)比較大的迭代,在這里我先把相對(duì)于上一個(gè)版本的改進(jìn)做一個(gè)解釋:

  • 1:進(jìn)一步完善畫點(diǎn),增加了使用字符串代替RGBT值
  • 2:實(shí)現(xiàn)字符串解析出RGBT值
  • 3:增加了畫圓的算法
  • 4:進(jìn)一步增強(qiáng)了代碼注釋

這四個(gè)點(diǎn)是這一節(jié)實(shí)現(xiàn)的主要內(nèi)容.這樣的修改為下面進(jìn)一步的實(shí)現(xiàn)提供了方便.

(二):功能介紹

首先我做的是把顏色相關(guān)的代碼單獨(dú)分離開來,新增加一個(gè)color.h文件,專用于顏色相關(guān)的操作和屬性表示.下面就是對(duì)畫點(diǎn),畫線,和畫圓的進(jìn)一步增強(qiáng).

1:畫點(diǎn)的進(jìn)一步增強(qiáng)

在畫點(diǎn)的時(shí)候,之前都是使用結(jié)構(gòu)體POINT來代替點(diǎn)的位置,但是,平時(shí)我們?cè)谑褂玫臅r(shí)候,比較方便的就是直接指定點(diǎn)的x,y值,所以,我首先增加了指定點(diǎn)的x,y值來畫點(diǎn).

/** 該函數(shù)用于指定點(diǎn)的橫坐標(biāo),縱坐標(biāo)的值來畫點(diǎn)* @param pFbdev 參考結(jié)構(gòu)體 fbdev* @param x 點(diǎn)的坐標(biāo)對(duì)應(yīng)的橫坐標(biāo)的值* @param y 點(diǎn)的坐標(biāo)對(duì)應(yīng)的縱坐標(biāo)的值* @param r 顏色對(duì)應(yīng)的R值 * @param g 顏色對(duì)應(yīng)的G值* @param b 顏色對(duì)應(yīng)的B值*/ void draw_x_y_dot(PFBDEV pFbdev,int x,int y,uint8_t r,uint8_t g,uint8_t b);

另一方面,之前無論是在畫點(diǎn),畫線還是畫其他形狀的時(shí)候,我們都僅僅是指定他們顏色的RGB值,但是沒有對(duì)透明度的指定,所以,在這里,我又新增了一個(gè)指定透明度來畫點(diǎn)的實(shí)現(xiàn).

/** 該函數(shù)用于實(shí)現(xiàn)畫點(diǎn),不過在這個(gè)函數(shù)中需要設(shè)定透明度參數(shù)* @param pFbdev 參考結(jié)構(gòu)體 fbdev* @param p 點(diǎn)的坐標(biāo)* @param r 顏色對(duì)應(yīng)的R值* @param g 顏色對(duì)應(yīng)的G值* @param b 顏色對(duì)應(yīng)的B值* @param t 顏色對(duì)應(yīng)的透明度值* @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值相結(jié)合實(shí)現(xiàn)一個(gè)畫點(diǎn)的函數(shù)實(shí)現(xiàn).

/** 該函數(shù)用于指定點(diǎn)的橫坐標(biāo),縱坐標(biāo)的值,并且必須指明透明度來畫點(diǎn)* @param pFbdev 參考結(jié)構(gòu)體 fbdev* @param x 點(diǎn)的坐標(biāo)對(duì)應(yīng)的橫坐標(biāo)的值* @param y 點(diǎn)的坐標(biāo)對(duì)應(yīng)的縱坐標(biāo)的值* @param r 顏色對(duì)應(yīng)的R值 * @param g 顏色對(duì)應(yīng)的G值* @param b 顏色對(duì)應(yīng)的B值* @param t 顏色對(duì)應(yīng)的透明度值*/ 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);

后面又增加了一些別的畫點(diǎn)的函數(shù),包括在RGBT結(jié)構(gòu)體中指定透明度啊等等函數(shù).這里不再贅余.

2:字符串代表顏色

在我們的程序中,我們可以知道,無論是顏色的RGBT值,都是使用uint8_t作為其類型的.也就是8為的正整形數(shù)字.我們可以使用兩個(gè)16進(jìn)制數(shù)來表示8位,例如0xff,轉(zhuǎn)換成二進(jìn)制數(shù)就是11111111.這樣就能代表顏色了.對(duì)于RGBT都是這樣表示,所以,我們使用”FFFFFFFF”來表示RGBT很合適.

下面這個(gè)代碼是我將字符串轉(zhuǎn)換成RGBT的算法,這個(gè)算法現(xiàn)在我感覺很不好,后期還需要修改.

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值的計(jì)算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; }

這樣,以后就可以方便的時(shí)候字符串來代替RGBT值了.

3:畫圓的實(shí)現(xiàn)

畫圓的實(shí)現(xiàn)比較簡(jiǎn)單,就是使用方程式:

(x?a)2+(y?b)2=c2

這樣,我們已經(jīng)知道圓的中心點(diǎn)(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 這個(gè)地方,如果將0.01換成別的,會(huì)有不一樣的效果,大家如果有興趣可以嘗試一下.

(三):后期規(guī)劃

在后面的時(shí)候,我們將畫點(diǎn),畫線,畫各種圖形分開來,正確實(shí)現(xiàn)一個(gè)在命令行界面下的一個(gè)小型的圖形庫(kù).主要是為了好玩,有趣.

(四):寫在后面

生活的樂趣就是充滿了很多不定因素.

大家可以登陸我的github下載源碼:

github地址

轉(zhuǎn)載于:https://www.cnblogs.com/bobo1223/p/7287506.html

總結(jié)

以上是生活随笔為你收集整理的frame buffer编程--画点功能和新增字符串代替RGBT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。