ALLGRO图形开发库的学习研究.2
作者:vrix.ipona
(2003.03.26 05:22)由于某些原因,我到今天才又写写ALLEGRO。我最近致力于我的作品GANIK的升级,在使用ALLEGRO的过程中,我虽然一直都在用256色,也就是8位色深,但32位色深已经对我产生了极大的吸引力,可是,我到现在也没搞定32位色深,不是由于其他原因,单单一个BLIT就使我头疼,因为ALLEGRO的BLIT在处理32位真彩的内存位图时,总是很慢,而使用masked_blit会快的多,但它搞花了屏幕,我在想办法解决以上提到的问题,如果有对ALLEGRO熟悉的朋友知道解决方法,麻烦告我一声。
因为以上的原因,我的GANIK一直都在256色下工作,但我在努力克服这种状况。最近在唯C世界的论坛,有人提到FREE DOS的一个GUI,叫做SEAL,我虽然对OS方面的事情较感兴趣,也去过许多开发OS的网站,却忽略了一件事情,那就是GUI的代码,我也许过于注重内核了吧,却忘了收集GUI的代码。不过我还是收集了一些。可惜的是,它们多不是C写的,或是GTK搀和在里面,或是使用的是自己写的图形库。一来,我觉得自己写图形库没有必要,因为不可能比专业人士写的更好,索性只只用最好的。二来吗,我可没那多时间研究用汇编写的GUI,不是不会汇编,而是移植到DJGPP不是那么简单,因为DJGPP用的是AT&T汇编。语法与MASM不同。即使我转译过来,也没时间熟悉他们。三则是由于我已经为ALLEGRO做了一些东西了,用起来不是那么陌生。种种原因,我对GUI的探索完全停留在原始社会状态。
我的GANIK在256色的状态将停留多旧呢?!我自己也不知道,不过,我从16色图形编程到256色编程,中间有一年的时间。虽然16色不是很好,但我作了很多东西。以至于后来的256色图形界面都和原来的16色相同,不过内部结构可是大不相同,采用双链表结构的GANIK,已经在窗体处理方面比较擅长,而原来的作品,要实现窗口切换,是不可能的。即使看到多个窗体,切换也只是表象,因为限制整体的是个循环。每个窗体组都有单独的循环,以至于不退出这个循环,连主界面彩单都不能用。而新的GANIK采用1个循环解决所有窗体的控制部分。界面重绘通过虚拟屏幕解决了频闪的问题。在此基础上,我对CVMP的升级开始了,最近已经完成了CVMP XP的核心代码,只等界面了,由于不是真彩色,所以很多图形不能被利用。只好开发内置的绘图工具,根据我去年的设计思路,这个绘图工具具备代码生成的功能。同时有属性表和工程向导,CVMP也成为它的一部分,因为这个绘图工具将担负图形开发的任务,如果大家对VB或DELPHI感兴趣,我想这个叫做PICRA的家伙可以让大家在DOS里进行类似的开发。而且在升级到真彩色之后的GANIK将可以调用WINDOWS的图形,这样一来,界面会更美观。
如果大家看过FREE DOS的GUI程序SEAL的话,我想大家对它的实现会非常感兴趣,不过它已经不是我们能在短时间里搞定思路的家伙了,为了我们能在GUI的开发方面有深入的了解。同时也为了我的GANIK,我将对SEAL的代码做逐步的分析。希望对我有帮助,也希望大家加入到分析SEAL的行列中来。
通过一段时间的琢磨,我的GANIK终于开始有点起色,从GSHELL的设计到PICRA的研发。我不仅逐步熟悉了ALLEGRO,更对GUI开发有了深入的认识。其实用DOS下的语言也可以学到很多WINDOWS的编程技巧。
(2003.09.01 11:09) 关于对ALLEGRO真彩色模式的应用,我想大家对它一定感兴趣,其实关于初始化真彩模式,建立色表,我并不熟悉,也不知道为什么,我做的只是从例程中截出它的代码,应用到我的程序。大家也可以这么做,我要说的是对透明效果的应用,正如我们在TC的XLIB中用SETMODE设置画点的模式,如XOR,COPY。CUT等,ALLEGRO提供了drawing_mode(int mode, BITMAP *pattern, int x_anchor, int y_anchor);
其中的mode可以是
DRAW_MODE_SOLID - the default, solid color drawing
DRAW_MODE_XOR - exclusive-or drawing
DRAW_MODE_COPY_PATTERN - multicolored pattern fill
DRAW_MODE_SOLID_PATTERN - single color pattern fill
DRAW_MODE_MASKED_PATTERN - masked pattern fill
DRAW_MODE_TRANS - translucent color blending
知道了这些,我们就可以设置mode为DRAW_MODE_DRANS,实现在真彩色模式的透明效果。pattern 是在读入位图时读入的PATTERN,而X-ANCHOR,Y-ANCHOR在一般情况下是0,但是如果你需要它的值是可以改变的,他们将改变绘制的角度。{暂时我也没有用到},另外就是在程序开头调用set_write_alpha_blender();(32位真彩)或set_alpha_blender();(16,24位真彩)然后才可以使用DRAWMODE。
关于BLIT在真彩色模式使用时不是很流畅,我建议使用draw_trans_sprite();
当前我的作品GANIK已经被升级到BUBBLE,CLIMAX的测试和完善正在进行中,希望大家给出更好的建议,使我的程序得到不断的完善。
http://minigui[小型桌面系统] 作者:vrix.ipona