注册 登录
编程论坛 C图形专区

[原创]给我一个画点函数,我能描绘出整个世界!

一笔苍穹 发布于 2006-05-27 15:26, 42742 次点击

给我一个画点函数,我能描绘出整个世界

——游戏程序员语录

如题,可以知道一个画点函数是多么的基本和重要。我将在这篇文章里向你介绍如何在使用各种图形库来画一个点,这个实验就像”Hello world”那个程序一样基础,但它能让你对要使用的库有个基本的认识,比如如何配置,如何初始化,如何下手去调用函数等。
[]所谓的画点是指绘制单个像素。
[另注]这是一个入门级的帖子,希望能对初哥们的迅速上手能有所帮助。

Graphics篇》

Graphics库通常可以被包含在TC/TC++/BC++等编译环境。我假设你的用是TC,首先你要确定菜单 ”Options” | “Linker” 下面的 “Graphics library”开关的状态是 “on”,也就是处于打开状态;而在TC++BC++中又稍有不同,同样是 ”Options” | “Linker”,此时你能看到有一个Libraries选项,选择后弹出一个对话框,勾选其中的 ” Graphics library” 即可;当然你也可能使用的是WIN-TC,那就更简单,以1.8版为例:“运行”|“编译配置”中,勾选“扩展库信息”下面的“Graphics.lib”就OK了(但如果你的LIB文件夹下没Graphics.lib就不会有这一项),到这里准备工作就做完了,我们开始编码:

#include <conio.h>
#include <graphics.h>

int main()
{
int gd=DETECT,gm=0; /* 在VGA以上的显卡中和gd=VGA,gm=VGAHI是同样效果 */
initgraph(&gd,&gm,""); /* BGI初始化 */

putpixel(320, 200, WHITE); /* 在屏幕的(320,200)的坐标位置用白色(WHITE)画一个点 */

getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegraph(); /* 恢复TEXT屏幕模式 */
return 0;
}

怎么样?不是很难吧,以上使用的都是库函数,更多库函数请参考相关资料。

NEO SDK篇》

首先你得下载一个NEO的压缩包,NEO资源站:http://www.bc-cn.net/Soft/kfyy/c/200605/302.html" target="_blank">https://www.ds0101.com/neosdk,编程中国的下载页面地址是:http://www.bc-cn.net/Soft/kfyy/c/200605/302.html。解压后你会得到一个类似” NEO_V2.1.90”名称的文件夹,打开它还会有 ”docs””examples””include””tools”,每一个具体的作用参见里面的” Readme!.txt”,现在我们只需要将”include”文件夹中的所有内容都复制到你的编译环境中的include 文件夹中去,这个编译环境可以是TC,也可以是TC++BC++,当然包括诸如WIN-TCTC4U等外壳环境,TC4U甚至还集成了NEO,但版本不是最新的。好了,开始编码,我以WIN-TC为例:

#include "neo.h"

int main()

{

neo_init(); /*NEO初始化*/

set_vbe_mode(VBE640X480X256); /*设置图形模式*/

install_keyboard(); /* 安装键盘事件处理模块 */

dot(320, 200, _WHITE); /* 在屏幕坐标(320,200)处以白色(_WHITE)画一个点 */

readkey (); /* 暂停一下,看看前面绘图代码的运行结果 */

return 0;

}

一样是非常简单的,这里用的也全是NEO库中的函数,实现的结果和前面那个例子是一样的,不过虽然分辨率一样,但色深可不一样哦,前面Graphics库的结果是在640X48016色图形模式下输出的,这个例子则是在640X480256色模式下输出的,当然这么简单的例子是看不出什么区别的了,另:如果你把VBE640X480X256改为VBE640X480X64K则会采用16位色深(共65536种颜色可用)。更多的库函数用法请参考docs文件夹下的用户手册。

Allegro篇》

首先你也必须下载Allegro,不过国内有爱好者将Allegro同编译环境DEV-C++ 5打包在一起提供下载了,比如:http://www.8623.com就是个好去处,里面还可以下载到Allegro + DJGPP的捆绑包。下载这种包的好处就是你不用亲自去编译安装Allegro,当然这也意味着你不能使用最新的Allegro版本了,如果你比较了解MinGWmakefile的话,自己下载最新版本手动编译安装将是个不错的主意。如果你用的是DEV-CPP的话,还可以下载最新的DevPak包,再用自带工具Packman安装也是一个非常方便快捷的办法,这样安装的Allegro可以DEV-CPP的“新建”|“工程”的工程向导中找到相应的模板,就不需做更多的参数配置了。不过如果安装的是捆绑版本,就需要在DEV的“工具”|“编译选项”|“在连接器命令行加入以下命令”栏中加入参数”-lalleg”(不要引号),如此一来在你就可以新建一个源程序并编码,编译时DEV将知道需要接连Allegro库了。另外需要注意的是,这样编译出来的执行文件,需要alleg4x.dll动态链接库的支持,通常最简单的做法是将它们放在一个文件夹里。也许你用的是DJGPP,那么也是上面的下载页面,先下载,然后参考里面的“无法编译帮助.txt”文件进行编译连接,不过由于是精简版,RHIDE似乎运行不了。好了,开始编译:

#include <allegro.h>

int main()

{

int white;

allegro_init(); /*Allegro 初始化*/

install_keyboard(); /*安装键盘处理例程*/

set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0); /*设置图形模式*/

set_color_depth(16); /*设置色深*/

white = makecol(255, 255, 255); /*计算白色值*/

putpixel(screen, 320, 200, white); /*在屏幕坐标(320,200)处用白色画点*/

readkey(); /*暂停一下,观看结果*/

return 0;

}

END_OF_MAIN(); /*魔术宏,用于支持跨平台,在DJGPP下可以去掉以避免产生警告*/

同样的结果,其中makecol()是用来转换像素格式颜色的,示例中是将RGB分量均设置为255(即白色)然后赋值给变量whiteNEO SDK中也有这个函数,我在NEO示例中的那个_WHITE其实就是makecol(255, 255, 255)的宏定义。在这个示例中我们使用了16位高彩。更多的函数说明请参考Allegro用户手册。


[此贴子已经被作者于2007-5-28 9:20:52编辑过]

65 回复
#52
yj2691720252011-10-23 00:28
好东西
#53
bccnsanyo2011-11-22 18:00
赞一个。。。
#54
华夏吾爱2011-12-15 22:46
VC中怎么设置哪位高人指点一下,拜托了,拜托了。最近老是被这种系统设置的问题困扰,那滋味相当无语。
#55
如去2011-12-25 21:48
学习了

#56
碧螺春能解渴2011-12-29 14:17
额额。大白菜还是没看懂。。。。
#57
linxiaobo2012-01-10 09:37
看起来好难啊
#58
aoguren2012-05-22 11:56
说的挺好。。。
#59
iswdbb2012-07-23 22:41
很强大 值得了解
#60
黄昏黄昏2013-01-15 19:34
VS2012怎么办 ...要去下个图形库吗?我有在网上看到2010的图形库,但不知道2012能不能用,也不知道怎么用..
#61
XQwindow2013-01-16 13:18
回复 楼主 一笔苍穹
很久以前的帖子了。。。
#62
the_ether2013-04-25 00:03
画点函数很重要。
#63
浮云之冰雪2013-05-11 11:50
很好啊!
#64
hsjjgm2013-05-23 17:23
给力啊
#65
花江老顽童2013-09-11 12:00
好文章
#66
anime2014-12-19 12:56
12