加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

像素画点算法

发布时间:2020-12-16 23:06:03 所属栏目:大数据 来源:网络整理
导读:int Draw_Line(int x0,int y0,// starting position int x1,int y1,// ending position UCHAR color,// color index UCHAR *vb_start,int lpitch) // video buffer and memory pitch { // this function draws a line from xo,yo to x1,y1 using differentia

int Draw_Line(int x0,int y0,// starting position
int x1,int y1,// ending position
UCHAR color,// color index
UCHAR *vb_start,int lpitch) // video buffer and memory pitch
{
// this function draws a line from xo,yo to x1,y1 using differential error
// terms (based on Bresenahams work)

int dx,// difference in x's
dy,// difference in y's
dx2,// dx,dy * 2
dy2,
x_inc,// amount in pixel space to move during drawing
y_inc,// amount in pixel space to move during drawing
error,// the discriminant i.e. error i.e. decision variable
index; // used for looping

// pre-compute first pixel address in video buffer
vb_start = vb_start + x0 + y0*lpitch;

// compute horizontal and vertical deltas
dx = x1-x0;
dy = y1-y0;

// test which direction the line is going in i.e. slope angle
if (dx>=0)
{
x_inc = 1;

} // end if line is moving right
else
{
x_inc = -1;
dx = -dx; // need absolute value

} // end else moving left

// test y component of slope

if (dy>=0)
{
y_inc = lpitch;
} // end if line is moving down
else
{
y_inc = -lpitch;
dy = -dy; // need absolute value

} // end else moving up

// compute (dx,dy) * 2
dx2 = dx << 1;
dy2 = dy << 1;

// now based on which delta is greater we can draw the line
if (dx > dy)
{
// initialize error term
error = dy2 - dx;

// draw the line
for (index=0; index <= dx; index++)
{
// set the pixel
*vb_start = color;

// test if error has overflowed
if (error >= 0)
{
error-=dx2;

// move to next line
vb_start+=y_inc;

} // end if error overflowed

// adjust the error term
error+=dy2;

// move to the next pixel
vb_start+=x_inc;

} // end for

} // end if |slope| <= 1
else
{
// initialize error term
error = dx2 - dy;

// draw the line
for (index=0; index <= dy; index++)
{
// set the pixel
*vb_start = color;

// test if error overflowed
if (error >= 0)
{
error-=dy2;

// move to next line
vb_start+=x_inc;

} // end if error overflowed

// adjust the error term
error+=dx2;

// move to the next pixel
vb_start+=y_inc;

} // end for

} // end else |slope| > 1

// return success
return(1);

} // end Draw_Line

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读