| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1340 人关注过本帖
标题:[求助]请教苍穹tc显示位图的问题
只看楼主 加入收藏
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
结帖率:100%
收藏
 问题点数:0 回复次数:8 
[求助]请教苍穹tc显示位图的问题

以前苍穹在论坛上发过一个在tc中显示16色位图的程序,可我为什么把图片路径写上去后显示不出来呢?显示的只有轮廓,中间是不规则的线条啊~大家帮我看一下吧~嘿嘿~多谢~

程序如下(红色是我改动的地方,蓝色是原来帖子的内容,我存放的位图test.bmp在tc目录下):
#include "stdio.h"
#include "dir.h"
#include "dos.h"
#include "graphics.h"

char *malloc();/*malloc转换*/

char bmp_to_dat(char *bmp,char *dat)
/*将16色BMP文件转换为可以用putimage输出的格式,bmp为原BMP文件,dat为转化文件*/
{unsigned char c[8],scan_times,scan_pixs;
unsigned char workpos;int i,j,k,n,nowpos,iw,ih;
static int color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};
unsigned char workline[640],scanline[640];
FILE *fp,*targetfp;
union
{unsigned char value;
struct
{unsigned cl:4;
unsigned ch:4;
}color;
}mycolor;

if((fp=fopen("test.bmp","rb"))==NULL)return(0);/*原来该行程序是:if((fp=fopen(bmp,"rb"))==NULL)return(0);*/
targetfp=fopen(dat,"wb");

fseek(fp,18,SEEK_SET);
iw=0;ih=0;
fread(&iw,4,1,fp); /*读图像宽度*/
fread(&ih,4,1,fp); /*读图像高度*/
if(iw==0&&ih==0&&iw>640&&ih>480)
{fclose(fp);fclose(targetfp);return(0);}

iw--;ih--; /*∵putimage中的长宽比实际数值少1*/
scan_times=iw/8+1; /*行处理单位数*/
scan_pixs=scan_times*4; /*行像素字节数∵1单位=4字节*/

fputc(iw%256,targetfp); /*填充信息头:长、宽部分*/
fputc(iw/256,targetfp);
fputc(ih%256,targetfp);
fputc(ih/256,targetfp);
fseek(fp,-scan_pixs,SEEK_END);

for(j=0;j<=ih;j++)
{nowpos=0;
fread(scanline,scan_pixs,1,fp);
fseek(fp,-scan_pixs*2,SEEK_CUR);
for(n=3;n>=0;n--) /*解码4个位面*/
{for(i=0;i<scan_times;i++) /*解码各编码单位*/
{workpos=0;
for(k=0;k<4;k++) /*分离出8个像素*/
{mycolor.value=scanline[i*4+k];
c[k*2]=color[mycolor.color.ch];
c[k*2+1]=color[mycolor.color.cl];
}
for(k=0;k<8;k++)workpos+=(c[k]>>n&1)<<(7-k);
workline[nowpos]=workpos;nowpos++;
}}
fwrite(workline,scan_pixs,1,targetfp);
}
fclose(fp);fclose(targetfp);
return(1);
}

main()
{int gd=VGA,gm=VGAHI,n;
char *buffer,bmpfile[13],_16file[13]={0};
FILE *fp;
struct ffblk *ff;
initgraph(&gd,&gm,"");
strcpy(bmpfile,"test.bmp"); /*原来该行程序是:strcpy(bmpfile,"mm.bmp");*/
strncpy(_16file,bmpfile,strlen(bmpfile)-3);
strcat(_16file,"dat");
if(!bmp_to_dat(bmpfile,_16file))
{puts("File Error!");closegraph();exit(0);}
fp=fopen(_16file,"rb");
findfirst(_16file,ff,FA_ARCH);
if((buffer=malloc(ff->ff_fsize))==NULL)exit(0);
n=0;
while(!feof(fp))
{buffer[n]=fgetc(fp);
n++;
}
putimage(63,5,buffer,COPY_PUT);
getch();
closegraph();
free(buffer);
fclose(fp);
}

这是原来的bmp图,即test.bmp:


这是显示效果(相机拍的):


我和大鸟都觉得好像是坐标有问题~但还是不懂~~~~

[此贴子已经被作者于2007-8-10 9:44:31编辑过]

搜索更多相关主题的帖子: 位图 苍穹 bmp char 
2007-08-09 20:43
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
收藏
得分:0 

好长...
if(iw==0&&ih==0&&iw>640&&ih>480)
{fclose(fp);fclose(targetfp);return(0);}
这条件怎么满足?

[此贴子已经被作者于2007-8-9 21:08:30编辑过]


简单的快乐着~
2007-08-09 21:05
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
收藏
得分:0 
回复:(奔跑的鸟)好长...if(iw==0&&ih==0&a...
这是图片尺寸条件吧~怎么满足是什么意思?

[此贴子已经被作者于2007-8-9 21:14:33编辑过]



Never stop running
2007-08-09 21:12
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
收藏
得分:0 
就是,他下面的语句好象永远也不会被执行哦

简单的快乐着~
2007-08-09 21:18
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
收藏
得分:0 
回复:(奔跑的鸟)就是,他下面的语句好象永远也不会被...

好像是有点~应该是“或”吧~?

[此贴子已经被作者于2007-8-9 21:29:20编辑过]


Never stop running
2007-08-09 21:22
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
你 这两张 图显示的挺好的,但是我用自己的一个 bmp 图就没有这么幸运了

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2007-08-12 22:02
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
收藏
得分:0 
回复:(vfdff)你 这两张 图显示的挺好的,但是我用自...
哪里啊~上头图片被屏蔽了~~显示的乱七八糟啊

Never stop running
2007-08-13 10:29
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复:(leopardxp)回复:(vfdff)你 这两张 图显示...
你是说 你程序显示的时候,呈现乱码?
反正你这里添出来的两个图片我能看得清楚,确实很好的,没有看出什么坐标有问题

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2007-08-13 22:48
leopardxp
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-7-26
收藏
得分:0 
回复:(vfdff)回复:(leopardxp)回复:(vfdff)你...

你看到的是什么图片?我放的是扑克牌图片啊~这里好像不能直接贴图,所以我放我博客上了,这只是个链接,但好像被sina屏蔽了啊


Never stop running
2007-08-13 23:38
快速回复:[求助]请教苍穹tc显示位图的问题
数据加载中...
 
   



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

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