上篇部落格中進行了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 "畫線、畫圓的操作在geometry.c中實現,它不是我們的重點,直接拿別人的使用即可。只需要將自己寫的畫點的函式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 }
fb_put_pixel用上即可
1 #include "3)在led_test.c中,需要測什麼?看下圖: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 }
畫線 */
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類的簡單用法。有些東西是自己工作經驗的理解,沒完全按英文解釋來理解,希望不會對大家造成誤解。工作太忙,以後又時間和精力就不斷地解...