[BCB] C++ Builder 绘图 绘制直线 —— 基于像素

大三的这前半个学期了,又遇上了这个精通(滑稽) Delphi的老师,人还挺好的其实。

关于他对分辨率的吐槽呀,对Delphi的赞美啊,都是非常幽默的。另外我倒是很欣赏他对他的笔记本的保养【dell i7 920xm的工作站吧估计】。

好了,接下来他上课,基本上就是敲代码(实践)。为了迎合我们专业没学过Pascal的条件,他决定用c++ builder 4【后来才知道的,

实在是有点老了】。之前的我确实是费了很多劲,花了很多时间才找到的相关的参考资料。

首先,一切的绘画都基于画布【Canvas】之上,我们操作的是Canvas->Pixels[x][y],其中x,y,就是坐标,单位是px。

另外,由于直接操作显示中的画布会导致重复刷新,效率很低,我们可以建立TBitmap【内存里】,在TBitmap上绘图,然后用

CopyRect复制到要显示的画布上即可【新建时,注意指定TBitmap尺寸】。

比如,在窗口上描一个蓝色的正方形:

for(int x = 0;x < 100;x++)
	for(int y = 0;y < 100;y++)
		Form1->Canvas->Pixels[x][y] = clBlue;

  下面给出一个比较简单的直线绘制函数。

void DrawLine(TCanvas *c, int x1, int y1 , int x2 , int y2);

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    bmp = new Graphics::TBitmap();
    bmp->Width = 202;
    bmp->Height = 202;
    randomize();
    SetTime();
    for(int i = 0; i < 20 ; i++)
    {
        DrawLine(bmp,1,1,201,10.6 * i - random(2));
        DrawLine(bmp,1,1,10.6 * i - random(2),201);
    }
    Form1->Canvas->CopyRect(Rect(0,0,201,201),bmp->Canvas,Rect(1,1,201,201));
}

void DrawLine( TCanvas *c,int x1, int y1 , int x2 , int y2)
{
    float k = 0;
    if(x2 != x1)
        k = ( y2 - y1 ) * 1.0 / ( x2 - x1);
    //draw
    if(k > 1)
        for(int i = 1; i <= y2 ; i++ )
            c->Pixels[(int)((i - y1) / k) - x1][i] = clBlack;
    else
        for(int i = 1; i <= x2 ; i++ )
            c->Pixels[i][(int)((i - x1) * k) + y1] = clBlue;
}

  

时间: 2024-08-01 22:10:24

[BCB] C++ Builder 绘图 绘制直线 —— 基于像素的相关文章

2. Quartz2D 绘制直线

#import <UIKit/UIKit.h> @interface MyView : UIView @end #import "MyView.h" @implementation MyView -(void) drawRect:(CGRect)rect{ [self drawLine]; } #pragma mark - 绘图方法 #pragma mark 绘制直线 -(void) drawLine{ //提示:使用Ref声明的对象,不需要用* //1. 获取上下文 -

DDA_为微分绘制直线算法

DDA_为微分绘制直线算法 以步进坐标轴部长=1像素为单位,计算y=kx + b,绘制像素点(x, round(y)). 即步进坐标增长1, 另一坐标增长K或者1/k. 程序如下: 1 //数值微分算法DDA 2 void CCGProjectWorkView::DDA_Line(const int startPos[], const int endPos[], const float lineColor[]) 3 { 4 glPushMatrix(); 5 //绘制直线 6 long delt

CAD编辑器中怎么绘制直线

在日常的工作中,都是需要CAD绘图的,但是在刚刚了解CAD的小伙伴们来说绘制复杂的CAD图纸是有一定的困难的,先要从很简单的开始,那在CAD编辑器中怎么绘制直线?大家可不要觉得很简单哈,这也是有一定的难度的.那下面我们就一起来看看具体绘制的操作过程吧,不会操作的小伙伴们可以来看看,希望能够帮助到你们. 第一步:首先,将电脑进行打开,如果电脑中没有安装CAD编辑器.那就在电脑桌面上任意打开一个浏览器,在搜索框中搜索迅捷CAD编辑器,接着点击进入官网,点击下载安装最新版本的CAD编辑器. 第二步:接

C#在pictureBox上绘制直线

1.在pictureBox上添加鼠标响应事件: this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown); this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove); 2.添加Bitmap作为画布,用于保存图形(

封装 用canvas绘制直线的函数--面向对象

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用面向对象的思想 封装 在canvas绘制直线的函数</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 &

【高度自适应】基于像素(px)为单位的高度自适应,适合单屏页面

/*基于像素(px)为单位的高度自适应,适合单屏页面*/ //设置高度(延伸到浏览器底部 或 延伸到参考元素底部,可以设置减少量) $.fn.fnSetHeight = function(A, B) { if (this.length > 0) { //参数处理 var $Reference, Decrease; switch (arguments.length) { case 0: $Reference = $(window); Decrease = 0; break; case 1: if

CALayer上绘制直线+position

/* 1. position:确定当前图层的锚点到父视图层坐标到原点的相对偏移量,在当前图层上找出锚点位置,将两者对齐 2. 绘制直线三部曲:创建可变路径(pathCreateMutable) : 添加到context(addPath) :开始绘制(drawPath) 途径阶段2:起始点确定,  属性设置(线宽和颜色) */

js 利用canvas绘制直线、曲线

<body> <!--画板--> // 当浏览器不支持的时候才会出现文字 <canvas id="canvas" style="background-color: black;">您当前的版本不支持 </canvas> <script type="text/javascript"> // 拿到画板 var canvas = document.getElementById('canvas'

绘制直线

实现效果: 知识运用: Graphics类中的DrawLine方法    其常用重载 public void DrawLine (Pen pen, Point pt1,Point pt2) //绘制一条连接两个Point结构的线 public void DrawLine (Pen pen,int x, int y,int x2,int y2) //连接由坐标指定的两个点的线条 实现代码: private void button1_Click(object sender, EventArgs e)