| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖
标题:请问c语言中bmp图片怎么显示
只看楼主 加入收藏
刀剑神魔
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2013-9-15
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
请问c语言中bmp图片怎么显示
我想用一张bmp图片当做程序的开始界面,不知道该怎么编写程序,请各位帮帮忙。最好能够有程序具体说明一下,谢谢了
搜索更多相关主题的帖子: 编写程序 c语言 图片 最好 
2013-09-20 17:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
把程序環境設置為圖形態,具體如何做查閱你自己的C編譯器技術手冊。

授人以渔,不授人以鱼。
2013-09-20 18:33
Rexfield
Rank: 6Rank: 6
来 自:幻想乡
等 级:侠之大者
威 望:1
帖 子:240
专家分:484
注 册:2010-7-28
收藏
得分:4 
C语言在win下多半是用gtk或者Qt了

If you're not failing every now and again, it's a sign you're not doing anything very innovative.
2013-09-21 00:06
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:4 
换个GUI的开发环境吧,win下用VS,linux下面用GTK+

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-09-21 06:17
刀剑神魔
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2013-9-15
收藏
得分:0 
回复 3楼 Rexfield
要求是用borlandc或者tc30编写
2013-09-24 22:30
Rexfield
Rank: 6Rank: 6
来 自:幻想乡
等 级:侠之大者
威 望:1
帖 子:240
专家分:484
注 册:2010-7-28
收藏
得分:0 
回复 5楼 刀剑神魔
gtk和Qt是图形库,不是开发环境,你可以百度一下他们的手册和安装方法。

If you're not failing every now and again, it's a sign you're not doing anything very innovative.
2013-09-24 22:34
刀剑神魔
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2013-9-15
收藏
得分:0 
回复 2楼 TonyDeng
/*换页函数(BMP模块的工具函数)*/
void selectpage(register char page)
{
     union REGS r;
     r.x.ax=0x4f05;
     r.x.bx=0;
     r.x.dx=page; /*选择页面*/
     int86(0x10,&r,&r);
}
/*设置SVGA屏幕模式(BMP模块的工具函数)*/
unsigned char set_SVGA_mode(int vmode)
{
     union REGS r;
     r.x.ax=0x4f02;
     r.x.bx=vmode;
     int86(0x10,&r,&r);
     return(r.h.ah);
}
/*读取BMP图像的函数(二级函数,被main函数调用)*/
void readbmp(char *filename)
{
     char buffer[640],page_new=0,page_old=0;
    int i,j,k,n,r,green,b,savemode;
    long position,width,length;
    FILE *fp;
     char path[MAXPATH];
     getcwd(path, MAXPATH);
       strcat(path,"\\wenjian\\");
    strcat(path,filename);
    fp=fopen(path,"rb");//rb的类型为const char * mode,机内定义的。是文件使用方式的标志之一:只读方式打开二进制文件。
     if(fp==NULL)
     {
          printf("Can't open file: %s",fp);
          return;
     }
     set_SVGA_mode(0x101);     /*自定义函数,用于将硬件无关性初始化屏幕为 640*480 256 色模式*/
     fseek(fp,28,SEEK_SET);    /*fseek用来移动文件内部位置指针,三个参量为文件指针,位移量(将位置指针移到距离参考点28个字节的地方),计算位移量的参考起始点。SEEK_SET表示文件首,用0表示,1,2分别指从当前位置和末位*/
     fread(&i,2,1,fp);        //&i为读入的数据所要存放的内存区域的指针,2为每项数据的长度,1为数据项的多少,fp为被读的区域的指针
     if(i!=8)     /*检查是否为256色位图*/
     {
          puts("Not a 256 color bitmap!");
          fclose(fp);
          exit(0);
     }
     fseek(fp,18,SEEK_SET);    /*如果正确,则位置指针偏移18字节,指向BMP的某些状态量的存储地址*/
     fread(&width,4,1,fp);        /*读入四个字节到width中*/
     fread(&length,4,1,fp);
    fseek(fp,54,SEEK_SET);    /*指向了真正需要的文件处*/
     for(i=0;i<256;i++)         /*按照该图片的DAC色表设置色彩寄存器*/
     {
          b=fgetc(fp);
          green=fgetc(fp);
          r=fgetc(fp);             /*获取R、G、B分量*/
          outportb(0x3c8,i);
          outportb(0x3c9,r>>2);     /*右移是要转化为VGA的6位寄存器形式*/
          outportb(0x3c9,green>>2);
          outportb(0x3c9,b>>2);
          fgetc(fp);
     }
     k=(width%4)?(4-width%4):0; /*宽度修正值*/
     for(j=length-1;j>=0;j--)
     {
          fread(buffer,width,1,fp);    /*每次读一项width个字节的数据,从fp指向的区域读到buffer指向的区域*/
          for(i=0,n=0;i<width;i++,n++)
         {
               position=j*640l+i;         /*计算要显示点的显存位置*/
               page_new=position/65536; /*计算显示页,每页能显示65535个位置*/
               if(page_new!=page_old)     /*当显示页不同时更换页面,提高一定的输出速度*/
               {
                    selectpage(page_new);    /*自定义函数,把page_new选中,置为当前页*/
                    page_old=page_new;    /*方便下一次换页*/
               }
               pokeb(0xa000,position%65536,buffer[n]); /*写到显存位置*/
         }
          fseek(fp,k,SEEK_CUR); /*每行绘制完后修正宽度,SEEK_CUR表示以当前位置为参考,后移k个字节*/
     }
      fclose(fp);
}
帮忙看看这个还需要增加些什么
2013-09-24 22:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我不在DOS下寫程序和拋棄TC/BC系列二十多年了,怎麽還記得那些細節。有些東西,是需要記住的,有些,是需要忘記的,而這種是屬於要忘掉的部分。現在沒人需要自己解釋圖像格式的啦,何況到哪去找256色的圖來,今時今日,還面對256色的圖像,誰看得下去呀。

[ 本帖最后由 TonyDeng 于 2013-9-24 22:59 编辑 ]

授人以渔,不授人以鱼。
2013-09-24 22:55
快速回复:请问c语言中bmp图片怎么显示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023234 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved