大三的这前半个学期了,又遇上了这个精通(滑稽) 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;
}

  

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

  1. [BCB] C++ BUILDER 绘图 随机生成图形

    由于老师要求要实现一个填充算法,而每次填充都需要一个源图形[不规则],用mspaint自己画太麻烦,于是打算自己动手随机生成. 这里用的是 Polygen()函数,但是注意首尾相接,另外,为了保证规则 ...

  2. Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)

    控制台程序. import javax.swing.JComponent; import java.util.*; import java.awt.*; import java.awt.geom.*; ...

  3. 学习Canvas绘图与动画基础 绘制直线(二)

    1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...

  4. 【OpenGL学习】 四种绘制直线的算法

    我是用MFC框架进行测试的,由于本人也没有专门系统学习MFC框架,代码若有不足之处,请指出. 一,先来一个最简单的DDA算法 DDA算法全称为数值微分法,基于微分方程来绘制直线. ①推导微分方程如下: ...

  5. c# 动态绘制直线和曲线

    c# 动态绘制直线和曲线   在本案例中利用Graphics对象动态地绘制直线和曲线.程序运行后,选择“直线”单选按钮,然后按下鼠标左键拖动鼠标就可以绘制直线,选择“曲线”单选按钮,然后移动鼠标就可以 ...

  6. canvas绘制直线

    HTML5 <canvas>元素用于图形的绘制,该元素只是图形容器,必须使用javascript脚本绘制图形创建一个画布:<canvas id="myCanvas" ...

  7. DDA_为微分绘制直线算法

    DDA_为微分绘制直线算法 以步进坐标轴部长=1像素为单位,计算y=kx + b,绘制像素点(x, round(y)). 即步进坐标增长1, 另一坐标增长K或者1/k. 程序如下: //数值微分算法D ...

  8. 第一课、OpenGL绘制直线等等

    第一课.OpenGL绘制直线等等 分类: [开发技术]OpenGL 2012-01-18 14:59 5217人阅读 评论(0) 收藏 举报 buffer图形c // //  main.c //  o ...

  9. html5--5-2 绘制直线

    html5--5-2 绘制直线 学习要点 如何在HTML5文档中添加canvas元素 canvas的属性 了解canvas坐标系 了解script元素 绘制一条直线(准确的说是线段) 什么是canva ...

随机推荐

  1. C语言学习1——结构体剖析

    一、定义结构体变量的方法 1.1先声明结构体类型在定义变量名 例如: a.声明结构体类型 struct student { int num; char name[20]; char sex; int ...

  2. JDK安装与环境变量配置

    1.安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目 ...

  3. Socket异步存储示例

    异步客户端存储示例: using System; using System.Net; using System.Net.Sockets; using System.Threading; using S ...

  4. WC项目要求

    #include "stdio.h" #include "string.h" #include "stdlib.h" int charcal ...

  5. 神盾解密工具 之 解密 “ PHP 神盾解密工具 ”

    不知道某君删了我的评论,还是发在这里面. 其实对神盾解密并没有那么感兴趣,只是看到了博主把工具又加密了,感觉不爽.研究了一下,其实解密没那么复杂. 利用php_apd扩展很轻松地就这把这搞定了.只有四 ...

  6. eclipse为方法添加注释的快捷键是什么

    /** * 登录验证 * @param 传入的vo类 * @return * @throws Exception */这种注释快捷键?   先敲“/”在敲两个**,然后回车

  7. C语言程序设计第12次作业

    一.本次课主要内容: 本章主要介绍指针相关的基础知识,本节课的主要如下 (1)通过示例"电码加密"引入字符指针与字符串处理.首先重点介绍字符指针和字符串的关联和区别,然后对常用字符 ...

  8. SQL SERVER 2008 r2安装失败之Integration Service

    因工作需要,遂把以前的2008升级到r2,升级失败,具体原因忘了,卸载2008,清了注册表删了文件,结果安装的时候失败了,如下图: 下一步-有错误日志和错误的序列号,错误日志在C:\Program F ...

  9. 按月统计tcode和report使用次数的工具

    执行report,输入要查询的日期和user, 工具会按照使用次数从高到低列出输入日期所在的月份内所有该user 曾经使用过的tcode 和report list: REPORT zusertcode ...

  10. Python编码问题:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(12

    今天安装了PyScripter编辑器,刚要写代码,突然就出现异常: <span style="font-size:14px;color:#ff0000;">>&g ...