| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 2163 人关注过本帖
标题:[原创]我制作的图形库 RGE.Draw2D 发布
收藏  订阅  推荐  打印 
ba_wang_mao
Rank: 3Rank: 3
来自:成都理工大学
等级:中级会员
帖子:282
积分:3028
注册:2006-11-7

不错,我先下载再说。
   请问“RockCarry”,为什么REG不支持XMS扩展内存呢?

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-8 08:46
ba_wang_mao
Rank: 3Rank: 3
来自:成都理工大学
等级:中级会员
帖子:282
积分:3028
注册:2006-11-7

如果支持打点(Putpixel)时直接打到XMS内存中,然后再通过memcopy拷贝到显示缓冲区就非常完美了。

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-8 10:38
RockCarry
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:401
积分:5562
注册:2005-8-5

说下存在的一些问题吧
看过代码的人应该都清楚,其实这个库做得很偷懒,都没有写多少代码
最大的问题可能就是速度的问题
还有就是目前的绘图功能太弱,只有极少的几何图元,不支持线宽线型,不支持多边形填充
而所谓的使用齐次变换矩阵进行几何变换,其实做得很垃圾,,而且由于运算精度没有多大的实用价值
没有提供多边形填充、种子填充等等功能(包括模式填充和位图填充)
没有提供反走样功能
在外部的接口上设计的还算可以,但是内部实现时比较偷懒,在性能上考虑得比较少了
2007-10-8 17:12
nwpu063417
Rank: 12Rank: 12Rank: 12
等级:版主
威望:4
帖子:336
积分:3677
注册:2007-5-11

挺厉害的  支持一下

2007-10-8 20:14
ba_wang_mao
Rank: 3Rank: 3
来自:成都理工大学
等级:中级会员
帖子:282
积分:3028
注册:2006-11-7

其实在MSDOS TC编译环境下如果能通过XMS实现申请800*600空间或者1024*768空间的双缓冲才是最实际的。

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-9 09:05
RockCarry
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:401
积分:5562
注册:2005-8-5

我采用的是 EMS,目前已经可以支持大内存,并且要实现双缓冲也很容易。目前只能支持 640x480x256 的分辨率。
使用 EMS 是因为常规内存、EMS 内存和页式的 VESA 显存,都可以抽象为页式内存,便于进行统一的管理。
而使用 XMS 内存,则所有的内存操作都要经过 XMS 的功能调用来进行,使用起来会比较麻烦。
2007-10-9 09:22
ba_wang_mao
Rank: 3Rank: 3
来自:成都理工大学
等级:中级会员
帖子:282
积分:3028
注册:2006-11-7

1、请问:为什么只能支持“640x480x256 的分辨率”呢?
NEO SDK中只需要 #define VBE800X600X256 0x103
然后调用如下图形初始化子程序,不就可以初始化为800*600*256色分辨率吗?
我很想知道。
2、我很想实现调用子程序Putpixel(x,y,color)时,不直接画到显存,而直接画到640*480大小的缓冲中,当整个缓冲画好后,再一次性送给显存,REG能否实现?

/////////////////////////////////////////////////////////////////////////////////////////////////
////图形模式初始化子程序
/////////////////////////////////////////////////////////////////////////////////////////////////
void InitGraph(unsigned int mode = VBE800X600X256)
{
_AX = 0x4F02;
_BX = mode;
__int__(0x10);
if (_AH != 0)
{
puts("Can't Initialize the graphics mode!");
exit(1);
}
}

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-9 11:38
RockCarry
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:401
积分:5562
注册:2005-8-5

晕,目前不支持是因为还没有完善
使用双缓冲在 RGE 里面很容易实现,在 RGE 里面有例子代码。大致的方法如下:
+-------------------------------------------------------------------------+
BMP backscreen = {0};
createbmp(&VESASCREEN);
backscreen.pmemdrv = &EMS_MEM_DRV; /* 使用 EMS 内存 */
backscreen.width = VESASCREEN.width;
backscreen.height = VESASCREEN.height;
backscreen.pixelbytes = VESASCREEN.pixelbytes;
createbmp(&backscreen); /* 创建缓冲位图 */
setcolor(RGB(0, 255, 0));
line(&backscreen, 10, 10, 100, 100); /* 在缓冲位图上绘制图形 */
fastputbmp(&VESASCREEN, 0, 0, &backscreen); /* 将缓冲位图刷新到屏幕上 */
destroybmp(&backscreen);
destroybmp(&VESASCREEN);
+-------------------------------------------------------------------------+

2007-10-9 12:20
ba_wang_mao
Rank: 3Rank: 3
来自:成都理工大学
等级:中级会员
帖子:282
积分:3028
注册:2006-11-7

RockCarry:
我将你的“快速入门”文档中的第二个程序(双缓冲)制作成double.C文件后,将REG中的*.h拷贝到C:\TC\INCLUDE\下,然后用TC++3.0 FOR DOS编译,结果出现连接错误,错误如下:
 Linker Error:Undefined symbol _destroybmp in module DOUBLE.C
 Linker Error:Undefined symbol _VGASCREEN in module DOUBLE.C
 Linker Error:Undefined symbol _unloadfont in module DOUBLE.C
等等...
不知何原因?

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-10-10 16:14
RockCarry
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:401
积分:5562
注册:2005-8-5

链接时加上 RGE.lib 库就可以了
但是需要注意内存模式

2007-10-10 16:58
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.069558 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved