| 域名空间 下载中心 社区论坛 信息公告 MY小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
DOS下看真彩BMP位图的小程序http://www.iyit.net 日期:2006-10-5 12:04:30 来源: 点击: |
另外几个函数的功能在后面的跟贴我简单的介绍了一下 A.c main文件 [code:1:9253783525] #include <stdio.h> #include <conio.h> #include "a.h" /*extern void print(); *extern void init(int); *extern void vinfo(int) *extern void demo(int,int,int); *extern void Pixel16HiC(int,int,int); *extern void Pixel24TrC(unsigned long int,int,int); *extern void Pixel256C(char,int,int); *#define Hi15(R,G,B) *#define HiColor(R,G,B) R*2048+G*32+B *#define TrColor(R,G,B) R*65536+G*256+B *#define Tr_HColor(R,G,B) *#define H_TColor(RGB) *#define T_HColor(RGB) */ main() { unsigned int i,j,x,y; FILE *fp; if((fp=fopen("d:\\BC4\\Ship\\24.bmp","rb"))==NULL)/*自己选择路径*/ printf("Can't open 256.bmp\n"); init(Tr800_600);/*初始化显示模式为24位真彩色,800*600分辨率*/ readpic(fp);/*主函数*/ fclose(fp); /*for(i=0;i<=767;i++) * line(i,i,1023,0,TrC(i,i*3,i/2));/*这里是画直线函数*/ */ getch(); return; } [/code:1:9253783525] BMP.C 主文件,里边有画直线函数 www.iyit.net(易特网络) [code:1:9253783525] #include<stdio.h> #include<alloc.h> #include<dos.h> #include"a.h" unsigned far* readpic(FILE *fp) { struct bmp_head far* bhead; int x,y; unsigned long size,length,width; void far * farmem; unsigned char far *RGB; char temp[30],over; fread(temp,30L,1,fp); /*读BMP文件头信息*/ bhead=(char far*)temp; over=bhead->width%4;/*BMP格式每行多出的位,我也不清楚为什么要多出这几位,当时我这里让我很头痛费了好大劲才查出来*/ width=bhead->width*3+over;/*位图宽*/ if((farmem=farmalloc(width*10+10))==NULL)/*分配缓冲区因为DOS最大可分配内存是一个段64K字节这里我分配了位图宽度*10 +10*/ printf("Not enough Memory\n"); fseek(fp,bhead->offset,0);/*读指针跳到位图数据起点*/ fread(farmem,width,10,fp);/*读位图数据到缓冲区*/ RGB=farmem;/*RGB画像素用的指针,每像素3个字节*/ for(y=bhead->hight;y>=0;y--)/*bhead->hight 位图高度*/ { for(x=0;x<bhead->width;x++)/*bhead->width 位图宽度*/ { Pixel24TrC(TrC(*(RGB+2),*(RGB+1),*RGB),x,y);/*画点*/ RGB=RGB+3;/*一个像素点3个字节*/ if(FP_OFF(RGB)==width*10+FP_OFF(farmem)||FP_OFF(RGB)==width*10+FP_OFF(farmem)+3)/*FP_OFF取远指针偏移,这个条件语句判断画完一个缓冲区*/ { fread(farmem,width,10,fp); RGB=farmem; }/*把BMP位图分成缓冲区大小的段*/ } RGB=RGB+over;/*每行最后多出over个字节*/ } farfree(farmem); return farmem; } /*画直线函数*/ void line(unsigned long left_x,unsigned long left_y,unsigned long right_x,unsigned long right_y,unsigned long color) { unsigned long x=left_x,y=left_y; if(left_x>right_x) if(left_y>right_y) { while(left_x-right_x>left_x-x) { Pixel24TrC(color,x,y); if((left_x-right_x)>(left_y-right_y)) while((left_y-right_y)*(left_x-x)<(left_x-right_x)*(left_y-y)) { x--; Pixel24TrC(color,x,y); } x--; if(y<=right_y) continue; if((left_y-right_y)>(left_x-right_x)) while((left_y-right_y)*(left_x-x)>(left_x-right_x)*(left_y-y)) { y--; Pixel24TrC(color,x,y); } y--; }; while(y>right_y) { Pixel24TrC(color,x,y); y--; }; } else { while(x>right_x) { Pixel24TrC(color,x,y); if((left_x-right_x)>(right_y-left_y)) 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:编程过把瘾:自己动手写操作系统 下一篇:DOS教学应上时代的发展才行 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 相关文章 | ||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||