完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
今天看邱毅凌老师的书,提到一个有效率的画斜线的算法,在这分享一下。
该算法完全没有用到乘法和除法,效能相当好,而且画出的斜线不会用锯齿状,这个算法基本与机器无法,系统只要提供画点函数draw_pixel(int x,int y,int nColor)即可。 void draw_line(int x1, int y1, int x2, int y2,int nColor) { int i, deltax, deltay, numpixels, d, dinc1, dinc2, x, xinc1, xinc2, y, yinc1, yinc2; // Calculate delta-x and delta-y for initialization if(x2-x1 < 0) deltax = x1-x2 ; else deltax = x2-x1 ; if(y2-y1 < 0) deltay = y1-y2 ; else deltay = y2-y1 ; // Initialize all vars based on which is the independent variable // if(deltax >= deltay) { //x is independent variable // numpixels = deltax + 1; d = (2 * deltay) - deltax; dinc1 = deltay << 1; dinc2 = (deltay - deltax) << 1; xinc1 = 1; xinc2 = 1; yinc1 = 0; yinc2 = 1; } else { // y is independent variable // numpixels = deltay + 1; d = (2 * deltax) - deltay; dinc1 = deltax << 1; dinc2 = (deltax - deltay) << 1; xinc1 = 0; xinc2 = 1; yinc1 = 1; yinc2 = 1; } // Make sure x and y move in the right directions // if(x1 > x2) { xinc1 = - xinc1; xinc2 = - xinc2; } if(y1 > y2) { yinc1 = - yinc1; yinc2 = - yinc2; } // Start drawing at // x = x1; y = y1; // Draw the pixels // for(i= 1; i< numpixels;i++) { // 画点 draw_pixel(x, y, nColor); if (d < 0) { d = d + dinc1; x = x + xinc1; y = y + yinc1; } else { d = d + dinc2; x = x + xinc2; y = y + yinc2; } } } |
|
相关推荐
3个回答
|
|
我认为一般像这样画圆,画线,画椭圆,画曲线有没有锯齿主要和液晶分辨率有关。差别只是效率高低。现在大部分用的都是类似bresenham算法,我看楼主的也应该属于这一算法。并且板子上带的画圆函数在画小半径圆时太准确,在堪误贴里有改正方法。
|
|
|
|
嗯 去看看
|
|
|
|
谢谢分享
|
|
|
|
只有小组成员才能发言,加入小组>>
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
528 浏览 2 评论
550 浏览 2 评论
信号发生器产生的正弦频率信号,用定时器进行捕获,当幅值低于3V后为什么MCU就无法捕获到了?
209 浏览 2 评论
875 浏览 2 评论
编码器模式下,中断内访问其他定时器cnt值,会导致进入中断次数丢失的原因?
859 浏览 2 评论
1331浏览 9评论
STM32出现error downloading following files怎么解决?
28浏览 3评论
stm32f103的RST复位后PWM就停止输出了,为什么?
37浏览 3评论
STM32G0空闲中断异常,且DMA接收不到数据是怎么回事?
24浏览 3评论
STM32F103用Timer3TRGO通道触发ADC,ADC在三路输出PWM高电平中间点采样,如何配置?
15浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 00:17 , Processed in 0.595156 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号