回 帖 发 新 帖 刷新版面

主题:[原创]本人制作的图形模式编程单元LOA Library(V1.10正式更新,请重新下载)

下载地址: [url=http://upload.programfan.com/upfile/200611130733983.rar]点这里下载[/url]
由于调色版再次被本人"恶意篡改", 所以请重新用Bmptocel.pas制作cel图块.
压缩包里面的loalib2.pas请暂时无视之......

图形模式操作函数/过程:
procedure set13h;
作用: 切换至图形模式(320x200x256色).
参数: 无

procedure settext;
作用: 切换至文本模式.
参数: 无

procedure setpal(pal:word);
作用: 初始化调色板, 请在调用set13h后立即调用之.
参数: pal为颜色的深浅程度(正常情况下一般设为100), 此参数关系到所有颜色的深浅.

procedure pset(x, y, z:word);
作用: 在屏幕上画点
参数: x为横坐标(0-319), y为纵坐标(0-199), z为颜色(0-255)

function  point(x, y:word):word;
作用: 取屏幕上某点的颜色值
参数: x为横坐标(0-319), y为纵坐标(0-199), 返回值为颜色(0-255)

procedure putimg(po: pointer; x, y, typ:word);
作用: 将一个cel图块放置在屏幕上(cel图块由组件Bmptocel.pas转换而来, 后面会说明)
参数: po为指向cel图块的指针, x为横坐标(0-319), y为纵坐标(0-199), typ为0时直接放置于屏幕上, 为1时用AND运算放置于屏幕上, 为2时用OR运算放置于屏幕上, 为3时用XOR运算放置于屏幕上, 为4时反色放置于屏幕上.

procedure getimg(po: pointer; x1, y1, x2, y2:word);
作用: 从屏幕上获得一个cel图块
参数: po为指向cel图块的指针, (x1, y1)为图块左上角, (x2, y2)为图块右下角.

procedure transput(po: pointer; x, y, trans:word);
作用: 将cel图块半透明显示在屏幕上
参数: po为指向cel图块的指针, x为横坐标(0-319), y为纵坐标(0-199).

procedure loadcel(po:pointer; nam:string);
作用: 从文件中读入一个图块
参数: po为指向cel图块的指针, nam为文件名

procedure savecel(po:pointer; nam:string);
作用: 将某图块存入文件中
参数: po为指向cel图块的指针, nam为文件名

procedure line(x, y, x2, y2, col:word);
作用: 画线
参数: 直线从(x, y)到(x2, y2), 颜色为col

procedure box(x1, y1, x2, y2, col, typ:word);
作用: 画矩形
参数: 左上角(x1, y1), 右下角(x2, y2), col为颜色, typ为0时不填充, typ为1时填充

procedure cls;
作用: 清屏(图形模式)
参数: 无

procedure waitvga;
作用: 将此句置于刷新屏幕语句前可使屏幕不闪烁
参数: 无

procedure showstr(x, y, color:word; st:string);
作用: 在屏幕上显示文字(支持中文)
参数: (x, y) 为第1个字的起始坐标, color为颜色, st为要显示的字符串(注意:此过程不会自动换行)
PS:话说我的签名就是用这个弄的......

procedure rolcel(po, po2:pointer; xr, yr:word);
作用: 拉伸/压缩图片
参数: po指针指向原始图片, po2指针指向转换后的图片, xr为拉伸/压缩后的宽度, yr为拉伸/压缩后的高度

procedure circle(cx, cy, r, color, typ:word);
作用: 画圆
参数: 圆心(cx, cy), 半径r, color为颜色, typ为0时不填充, typ为1时填充.

接下来说明一下bmptocel.pas的用法:
运行此程序, 输入BMP文件名(无须加扩展名), BMP必须是24位真彩色, 且不大于320x200(长宽都不能超), 会生成一个.cel文件.
然后在程序开头加这样2句:

type
  bmptype:array[0..cc]of word;{这里的cc按这样计算: cc=(图片高度*图片宽度)/2+1, 四舍五入, 如果你要用多个不同大小的cel, 请分别定义类型}
  pbmptype:^bmptype;{指向bmptype类型的指针}

然后就可以用loadcel过程读入cel图块了(读入前别忘了用new指令为指针开辟空间, 如果你忘了, 轻则TP跳出, 重则花屏死机......)

剩下的一会再写......写说明文档真痛苦- -|||

回复列表 (共11个回复)

沙发

挖坑占位

板凳

再挖一个坑

3 楼

好呀,
楼主是不是可以教我如何用tp7显示一幅640*480*256的BMP图像呢

4 楼

640*480*256需要使用SVGA模式, 而且640x480x256结构已达到256KB......你想想DOS下总共有多少内存吧......(正常情况下512K不到)

5 楼

那能不能不存在变量里,直接输出

6 楼

我回去试试

7 楼

试成功没有?

8 楼

楼主试成功了没有?

9 楼

自己顶一下........

10 楼

楼上的,能不能说一下如何在Dos的graph模式下截图,就象你的签名里那样

我来回复

您尚未登录,请登录后再回复。点此登录或注册