LCD程式設計 畫點線圓

2022-06-21 06:42:08 字數 3949 閱讀 5603

上篇部落格中進行了lcd的簡單測試,這篇部落格將進行更加複雜的測試——畫點、畫線、畫圓。畫線和畫圓是在畫點的基礎上實現的,因此本篇部落格重點實現畫點操作。

先丟擲這樣的乙個問題,已知:

(x,y)的座標;

bpp;

xres;

yres;

那麼,如何在framebuffer中獲得畫素的位址呢?

(x,y)畫素的起始位址 = fb_base +(xres * bpp /8)* y +x * bpp/8

(xres * bpp /8)表示一行佔據多少個位元組,乘以y表示y行共佔據多少個畫素

2)在framebuffer.c中實現畫點操作

1 #include "

lcd.h"2

3/*實現畫點 */4

5/*獲得lcd引數 */6

static unsigned int

fb_base;

7static

intxres, yres, bpp;89

void fb_get_lcd_params(void)10

1314

/*rgb: 0x00rrggbb

*/15 unsigned short convert32bppto16bpp(unsigned int

rgb)

1628

2930

/*color : 32bit, 0x00rrggbb

31* color是32位的,用的lcd是16位的,因此需要將color轉換成是16位的。

32*/

33void fb_put_pixel(int x, int y, unsigned int

color)

3456 }

畫線、畫圓的操作在geometry.c中實現,它不是我們的重點,直接拿別人的使用即可。只需要將自己寫的畫點的函式

fb_put_pixel用上即可

1 #include "

framebuffer.h"2

3/*4*

67//-------------畫圓函式。引數:圓心,半徑,顏色---------- 8//

畫1/8圓 然後其他7/8對稱畫 9//

---------------->x

10//

|(0,0) 0

11//

| 7 1

12//

| 6 2

13//

| 5 3

14//

(y)v 4

15//

16//

l = x^2 + y^2 - r^2

17void draw_circle(int x, int y, int r, int

color)

18

41}

42}

4344

//-----------畫線。引數:起始座標,終點座標,顏色--------

45void draw_line(int x1,int y1,int x2,int y2,int

color)

46

61 x1+=1

; 62 e+=dy;

63}

64}

65else

//2/8 octant

66

72 y1+=1

; 73 e+=dx;

74}

75}

76}

77else

//dy<0

78

87 x1+=1

; 88 e+=dy;

89}

90}

91else

//7/8 octant

92

98 y1-=1

; 99 e+=dx;

100}

101}

102}

103}

104else

//dx<0

105

116 x1-=1

; 117 e+=dy;

118}

119}

120else

//3/8 octant

121

127 y1+=1

; 128 e+=dx;

129}

130}

131}

132else

//dy<0

133

142 x1-=1

; 143 e+=dy;

144}

145}

146else

//6/8 octant

147

153 y1-=1

; 154 e+=dx;

155}

156}

157}

158}

159 }

3)在led_test.c中,需要測什麼?看下圖:

畫線 */

57 draw_line(0, 0, xres - 1, 0, 0xff0000

);58 draw_line(xres - 1, 0, xres - 1, yres - 1, 0xffff00

);59 draw_line(0, yres - 1, xres - 1, yres - 1, 0xff00aa

);60 draw_line(0, 0, 0, yres - 1, 0xff00ef

);61 draw_line(0, 0, xres - 1, yres - 1, 0xff4500

);62 draw_line(xres - 1, 0, 0, yres - 1, 0xff0780

);63

64 delay(1000000

);65

66/*

畫圓 */

67 draw_circle(xres/2, yres/2, yres/4, 0xff00

);68 }

所看到的現象就是,lcd顯輸出整屏紅色----->綠色------->藍色------->黑色---------->畫線--------->畫圓

Openlayers 根據座標點畫點線圓多邊形

根據座標點畫點線圓多邊形,如下 geometry type point linestring polygon circle none bezier 繪製 繪製圓形 繪製線段 繪製多邊形 繪製單個點 清除所有 清除指定 地圖部分 var map new ol.map controls ol.contr...

opengl畫點線面

1 關於點 點的大小預設為1個畫素,但也可以改變之。改變的命令為glpointsize,其函式原型如下 void glpointsize glfloat size size必須大於0.0f,預設值為1.0f,單位為 畫素 注意 對於具體的opengl實現,點的大小都有個限度的,如果設定的size超過...

用OpenLayers API和類來畫點 線 面

看好多人都寫openlayers的一些說明,但總感覺沒有具體事例解釋,不太爽。抽點時間從openlayers官方 上找些例子具體解釋一下map vector feature類的簡單用法。有些東西是自己工作經驗的理解,沒完全按英文解釋來理解,希望不會對大家造成誤解。工作太忙,以後又時間和精力就不斷地解...