该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

八.在屏幕上画位图

计算机绘制图像通常采用一种称为位映射图(BITMAP)的图形处理方法进行,位映射图是一个矩形的点阵结构(二维矩阵),显示在屏幕上时,对应屏幕上一个矩形区域,组成位图的数据储存在内存中一段连续的区间。我们比较常见的位图文件有:BMP、PCX、GIF、JPG等。位图通常存储在外部文件中,使用以前必须将其从磁盘文件调入内存。下面介绍将一个256色PCX图形文件读入内存的方法:

1.定义PCX文件头结构:

typedef struct PCX_HEADER

{

char menufactrue; /* 厂家标识编号 0x0a */

char version; /* 文件版本编号 */

char packing_type; /* 压缩模式 */

char bits_per_pixel; /* 每点占用的位数 */

int minx; /* 最小X坐标值 */

int miny; /* 最小Y坐标值 */

int maxx; /* 最大X坐标值 */

int maxy; /* 最大Y坐标值 */

int hres; /* 水平分辨率 */

int vres; /* 垂直分辨率 */

char palette[48]; /* 颜色调色板 */

char unused; /* 未使用 */

char bit_plance; /* 位平面个数 */

int bytes; /* 单一水平线占用的字节数 */

int palette_type; /* 调色板类型 */

char unused2[58]; /* 未使用 */

}PCXHeader,*PCXHeaderPtr;

2.定义用来存放PCX图像数据的结构:

typedef struct PCX_PICTURE

{

int width;

int height;

char far *buffer;

RGBColor palette[256];

}PCXPicture,*PCXPicturePtr;

3.初始化图像数据的函数:

int InitPCX(PCXPicturePtr image,int w,int h)

{

unsigned size=w*h;

image->width=w;

image->height=h;

image->buffer=(char far *)farmalloc(size);

if(image->buffer==NULL) return 0;

return 1;

}

4.从外部文件读入数据的函数:

int LoadPCX(char *filename,PCXPicturePtr image,int flag)

{

FILE *fp;

unsigned num_bytes,count,size;

int index;

unsigned char data;

PCXHeader PcxHeader;

size=image->width*image->height;

if((fp=fopen(filename,"rb"))==NULL)

return 0;

fread(&PcxHeader,sizeof(PCXHeader),1,fp);

count=0;

while(count<=size)

{

data=fgetc(fp);

if(data>=192&&data<=255)

{

num_bytes=data-192;

data=fgetc(fp);

while(num_bytes-->0)

{

*(image->buffer+count)=data;

++count;

}

}

else

{

*(image->buffer+count)=data;

++count;

}

}

fseek(fp,-768L,SEEK_END);

for(index=0;index<256;index++)

{

image->palette[index].red=((fgetc(fp))>>2);

image->palette[index].green=((fgetc(fp))>>2);

image->palette[index].blue=((fgetc(fp))>>2);

}

fclose(fp);

if(flag==1)

for(index=0;index<256;index++)

SetPaletteRegister(index,(RGBColorPtr)&image->palette[index]);

return 1;

}

其中参数flag用来指明调入文件的同时是否设置颜色寄存器(flag=1设置)。

5.画位图的函数:

void DrawImage(int x,int y,int width,int height,char far *image)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(*image!=0&&(x+j)>=0&&(x+j)<320&&(y+i)>=0&&(y+i)<200)

DrawPoint(x+j,y+i,*image);

image++;

}

}

x,y是图像在屏幕上的左上角坐标,width,height是图像的宽度和高度,image是指向内存中图像的指针。

我们对if(*image!=0&&(x+j)>=0&&(x+j)<320&&(y+i)>=0&&(y+i)<200)语句进行一下分析:

*image!=0用来检查所画的颜色值是否是透明色,如果是,则不画出来,这样我们就可以画出有透明效果的图象,即透过图象可以看到背景,透明色通常取值0,也可以用其他的颜色值表示。

(x+j)>=0&&(x+j)<320&&(y+i)>=0&&(y+i)<200语句用来判断所画点的坐标是否超出屏幕显示的范围,这样可以画出具有裁剪效果的图象,如图象的一部份在屏幕外。

这个函数并不是最快的,因为它要执行width X height次判断,更快的函数请看VGA13H函数库中的绘图函数�

C语言dos游戏编程,◣电脑游戏编程入门 (DOS)◥相关推荐

  1. 计算机玩电脑游戏,玩电脑游戏250字

    最近,我刚学会了一种电脑游戏超级索尼科! 我先选了人物四号小兔子!因为这是我好心的同学叶奕杭给我的宝贝建议.因为小兔子会飞,而其他人物都不会.所以,小兔子就能轻而易举地飞过一... 今天,我百般无聊, ...

  2. 用c游戏编程语言,电脑游戏都是用什么编程语言编得?

    2008-08-01 我刚开始学VB.net,感觉VB.net常在Visual studio的环境下运行,之后下载了Microsoft Visual Basic 2005 express edtion ...

  3. 计算机游戏的英语怎么写,电脑游戏英语怎么写

    随着电脑的普及,电脑游戏在我们的生活中也越来越常见.下面小编为大家带来电脑游戏的英语意思和相关用法,欢迎大家一起学习! 电脑游戏的英语意思 Computer game 电脑游戏的相关英语例句 1. A ...

  4. 电脑游戏怎么转移新电脑,换新电脑如何迁移游戏

    案例分享:"朋友们,我之前在steam上下载了泰拉瑞亚,玩了很久,但由于我换了电脑,在新设备上登录steam账号时,我的游戏存档不存在了.我不想丢失掉那些宝贵的数据.电脑游戏怎么转移新电脑? ...

  5. 我热爱计算机作文450字,我爱玩电脑游戏

    我爱玩电脑游戏 相关内容: 随着网络越来越发达,电脑游戏也随着横行了.下面是语文迷整理的玩电脑游戏的英语作文,希望对你有帮助.篇一:Nowadays, there are more and more ...

  6. 关于计算机高中英语作文,玩电脑游戏高中英语作文

    现在越来越多的学生总是花很多时间来玩电脑游戏,电脑游戏在许多方面有不良影响.下面是小编为大家精心整理的关于玩电脑游戏高中英语作文,希望能够帮助到你们. 玩电脑游戏 Nowadays playing c ...

  7. 电脑系统CMD命令dos命令大全

    一般来说dos命令都是在dos程序中进行的,如果电脑中安装有dos程序可以从开机选项中选择进入,在windows 系统中我们还可以从开始运行中输入cmd命令进入操作系统中的dos命令,如下图: 电脑系 ...

  8. 八十年代的计算机游戏,盘点PC游戏史上最重要的50款游戏!第1期:60-80年代

    9.<创世纪4(Ultima IV)> 发售时间:1985年9月 开发者:Origin Systems 入选理由:如今很多游戏中的"道德系统"很可能就是从这里开始的,这 ...

  9. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  10. c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个

    急求:C语言编写的中国象棋游戏一个 來源:互聯網  2009-09-08 12:30:35  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...

最新文章

  1. Django 自定义模板标签TemplateTags
  2. 改变QTableWidget 行高
  3. NYOJ 264 国王的魔镜
  4. 迪粉汇接入网易云信,打造比亚迪车友亲密沟通利器
  5. 看到这一幕,我甚至都想戒烟了。。 | 今日最佳
  6. Java 9:对可选的增强
  7. 吴恩达深度学习编程作业汇总
  8. 如何判断一个new出来的空对象
  9. 截至11日14时37分,“11.11京东全球好物节”累计下单金额突破1794亿元
  10. 力扣——LCP 37. 最小矩形面积(困难)
  11. Hyperledger Fabric chaincode 开发(疑难解答)
  12. Prototype使用$w()函数
  13. mybatis使用collection查询集合属性规则
  14. caffe手写数字分类-学习曲线
  15. 华为网络安全工程师:HCNA-Security(H12-711)题型解析(第一部分)-马青-专题视频课程...
  16. 在 pandas 中画树状图,使用 squarify 画树状图
  17. WePhone网络电话灰色运营?专家:若无许可属非法
  18. Telemetry 标准日志接口如何提升运维效率?
  19. 联想G40-30进入PE鼠标键盘失灵解决方法
  20. MLAPP————第十二章 隐线性模型

热门文章

  1. 数据化运营——影响互联网产品成败的关键,互联网营销
  2. 一个根据SortOrder控制排序的存储过程
  3. android11电视,谷歌发布首款Android TV版 基于Android 11开发者预览版
  4. css3中transform-style的用法
  5. php中的字符串可以当做数组调用
  6. 应用安全-CMF/CMS漏洞整理
  7. SourceAnalysis/Binder源码分析.md
  8. tcp 重发 应用层重传
  9. ios虚拟机安装(二)
  10. 当手机访问时自动跳转到手机网站