[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;
}
[BCB] C++ Builder 绘图 绘制直线 —— 基于像素的更多相关文章
- [BCB] C++ BUILDER 绘图 随机生成图形
由于老师要求要实现一个填充算法,而每次填充都需要一个源图形[不规则],用mspaint自己画太麻烦,于是打算自己动手随机生成. 这里用的是 Polygen()函数,但是注意首尾相接,另外,为了保证规则 ...
- Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)
控制台程序. import javax.swing.JComponent; import java.util.*; import java.awt.*; import java.awt.geom.*; ...
- 学习Canvas绘图与动画基础 绘制直线(二)
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...
- 【OpenGL学习】 四种绘制直线的算法
我是用MFC框架进行测试的,由于本人也没有专门系统学习MFC框架,代码若有不足之处,请指出. 一,先来一个最简单的DDA算法 DDA算法全称为数值微分法,基于微分方程来绘制直线. ①推导微分方程如下: ...
- c# 动态绘制直线和曲线
c# 动态绘制直线和曲线 在本案例中利用Graphics对象动态地绘制直线和曲线.程序运行后,选择“直线”单选按钮,然后按下鼠标左键拖动鼠标就可以绘制直线,选择“曲线”单选按钮,然后移动鼠标就可以 ...
- canvas绘制直线
HTML5 <canvas>元素用于图形的绘制,该元素只是图形容器,必须使用javascript脚本绘制图形创建一个画布:<canvas id="myCanvas" ...
- DDA_为微分绘制直线算法
DDA_为微分绘制直线算法 以步进坐标轴部长=1像素为单位,计算y=kx + b,绘制像素点(x, round(y)). 即步进坐标增长1, 另一坐标增长K或者1/k. 程序如下: //数值微分算法D ...
- 第一课、OpenGL绘制直线等等
第一课.OpenGL绘制直线等等 分类: [开发技术]OpenGL 2012-01-18 14:59 5217人阅读 评论(0) 收藏 举报 buffer图形c // // main.c // o ...
- html5--5-2 绘制直线
html5--5-2 绘制直线 学习要点 如何在HTML5文档中添加canvas元素 canvas的属性 了解canvas坐标系 了解script元素 绘制一条直线(准确的说是线段) 什么是canva ...
随机推荐
- Apache php Mysql部署(一)下载安装
前言 最近公司需要开发一个网站,但是又有特殊要求:不能使用java.只能在Windows平台部署.没方法,只能选择了Apache+php+Mysql的方案. 不知道有没有更好的,听所golang挺不错 ...
- $scope 的生命周期
当Angular关心的事件发生在浏览器中时,比如用户在通过ng-model属性监控的输入字段中输入,或者带有ng-click属性的按钮被点击时,Angular的事件循环都会启动.这个事件将在Angul ...
- 【转】tomcat性能调优
一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü 吞吐量 ü Responsetime ü Cpuload ü ...
- 更新centos curl
centos curl 默认使用nss,而不是openssl 升级curl让curl支持openssl rpm -Uvh http://www.city-fan.org/ftp/contrib/yum ...
- char* 和char[]的区别
以下内容均来自互联网,系笔者汇总并总结. 1. 问题介绍 问题引入:在实习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="ab ...
- 清除mysql表中数据
delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内 ...
- ubuntu 安装MTK 移动终端usb驱动
lsusbBus 001 Device 002: ID 8087:8000 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation ...
- ajax+php数据增加查询获取删除
前段代码部分其实前面已经有写出但是做一点修改所以还是贴出来,可能大家看到代码回不理解,看完图我想大家会理解我为什么这么写了,这和前端布局有关系的,先列出内容在选择内容删除或修改 <!DOCTYP ...
- MVC 请求处理流程(二)
[上一篇]中我们说到了对象AsyncControllerActionInvoker,在Controller的ExecuteCore方法中调用AsyncControllerActionInvoker对象 ...
- IOS的Crash情况在Crashlytics平台上统计解决方案的一点遗憾(截止到2015年6月14日)
平台针对特定版本的monkey操作后数量统计,按时间段定时去获取,最后根据操作批次出具分析报告: 问题是crashlytics平台仅提供一个BS登录查看WEB后台,所以无法通过API或者DB去直接获取 ...