zoukankan      html  css  js  c++  java
  • [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;
    }
    

      

  • 相关阅读:
    leetcode -- Triangle
    leetcode difficulty and frequency distribution chart
    leetcode -- Sqrt(x)
    leetcode -- Climbing Stairs
    leetcode -- Populating Next Right Pointers in Each Node II
    leetcode -- Populating Next Right Pointers in Each Node
    ThreadLocal
    Thread
    进程或者线程状态
    ThreadGroup
  • 原文地址:https://www.cnblogs.com/maikaze/p/4942302.html
Copyright © 2011-2022 走看看