[求助]请教苍穹tc显示位图的问题
<P>以前苍穹在论坛上发过一个在tc中显示16色位图的程序,可我为什么把图片路径写上去后显示不出来呢?显示的只有轮廓,中间是不规则的线条啊~大家帮我看一下吧~嘿嘿~多谢~<br><br>程序如下(红色是我改动的地方,蓝色是原来帖子的内容,我存放的位图test.bmp在tc目录下):<br>#include "stdio.h"<br>#include "dir.h"<br>#include "dos.h"<br>#include "graphics.h"</P><P>char *malloc();/*malloc转换*/</P>
<P>char bmp_to_dat(char *bmp,char *dat)<br>/*将16色BMP文件转换为可以用putimage输出的格式,bmp为原BMP文件,dat为转化文件*/<br>{unsigned char c[8],scan_times,scan_pixs;<br>unsigned char workpos;int i,j,k,n,nowpos,iw,ih;<br>static int color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};<br>unsigned char workline[640],scanline[640];<br>FILE *fp,*targetfp;<br>union<br>{unsigned char value;<br> struct<br> {unsigned cl:4;<br> unsigned ch:4;<br> }color;<br>}mycolor;</P>
<P><FONT style="BACKGROUND-COLOR: #00ff00" color=#ff0000>if((fp=fopen("test.bmp","rb"))==NULL)return(0);</FONT><FONT style="BACKGROUND-COLOR: #00ff00" color=#3300ff>/*原来该行程序是:if((fp=fopen(bmp,"rb"))==NULL)return(0);*/<br></FONT>targetfp=fopen(dat,"wb");</P>
<P>fseek(fp,18,SEEK_SET);<br>iw=0;ih=0;<br>fread(&iw,4,1,fp); /*读图像宽度*/<br>fread(&ih,4,1,fp); /*读图像高度*/<br>if(iw==0&&ih==0&&iw>640&&ih>480)<br>{fclose(fp);fclose(targetfp);return(0);}</P>
<P>iw--;ih--; /*∵putimage中的长宽比实际数值少1*/<br>scan_times=iw/8+1; /*行处理单位数*/<br>scan_pixs=scan_times*4; /*行像素字节数∵1单位=4字节*/</P>
<P>fputc(iw%256,targetfp); /*填充信息头:长、宽部分*/<br>fputc(iw/256,targetfp);<br>fputc(ih%256,targetfp);<br>fputc(ih/256,targetfp);<br>fseek(fp,-scan_pixs,SEEK_END);</P>
<P>for(j=0;j<=ih;j++)<br>{nowpos=0;<br> fread(scanline,scan_pixs,1,fp);<br> fseek(fp,-scan_pixs*2,SEEK_CUR);<br> for(n=3;n>=0;n--) /*解码4个位面*/<br> {for(i=0;i<scan_times;i++) /*解码各编码单位*/<br> {workpos=0;<br> for(k=0;k<4;k++) /*分离出8个像素*/<br> {mycolor.value=scanline[i*4+k];<br> c[k*2]=color[mycolor.color.ch];<br> c[k*2+1]=color[mycolor.color.cl];<br> }<br> for(k=0;k<8;k++)workpos+=(c[k]>>n&1)<<(7-k);<br> workline[nowpos]=workpos;nowpos++;<br> }}<br> fwrite(workline,scan_pixs,1,targetfp);<br>}<br>fclose(fp);fclose(targetfp);<br>return(1);<br>}</P>
<P>main()<br>{int gd=VGA,gm=VGAHI,n;<br>char *buffer,bmpfile[13],_16file[13]={0};<br>FILE *fp;<br>struct ffblk *ff;<br>initgraph(&gd,&gm,"");<br><FONT style="BACKGROUND-COLOR: #66ff00"><FONT color=#ff0000>strcpy(bmpfile,"test.bmp");</FONT> </FONT><FONT style="BACKGROUND-COLOR: #66ff00" color=#0000ff>/*原来该行程序是:strcpy(bmpfile,"mm.bmp");*/<br></FONT>strncpy(_16file,bmpfile,strlen(bmpfile)-3);<br>strcat(_16file,"dat");<br>if(!bmp_to_dat(bmpfile,_16file))<br>{puts("File Error!");closegraph();exit(0);}<br>fp=fopen(_16file,"rb");<br>findfirst(_16file,ff,FA_ARCH);<br>if((buffer=malloc(ff->ff_fsize))==NULL)exit(0);<br>n=0;<br>while(!feof(fp))<br>{buffer[n]=fgetc(fp);<br> n++;<br>}<br>putimage(63,5,buffer,COPY_PUT);<br>getch();<br>closegraph();<br>free(buffer);<br>fclose(fp);<br>}<br><br><FONT style="BACKGROUND-COLOR: #0000ff"><FONT color=#ffff00>这是原来的bmp图,即test.bmp:</FONT><br></FONT></P>
<P><IMG src="http://s1.album.sina.com.cn/pic/5737a1e8020011co" border=0><br></P>
<P><FONT style="BACKGROUND-COLOR: #0033ff" color=#ffff00>这是显示效果(相机拍的):</FONT> </P>
<P><IMG src="http://s12.album.sina.com.cn/pic/5737a1e8020011cn" border=0><br>我和大鸟都觉得好像是坐标有问题~但还是不懂~~~~[em06]</P>
[align=right][color=#000066][此贴子已经被作者于2007-8-10 9:44:31编辑过][/color][/align]
<P><FONT color=#ff0000><FONT color=#000000>好长...<br></FONT>if(iw==0&&ih==0&&iw>640&&ih>480)<br>{fclose(fp);fclose(targetfp);return(0);}<br></FONT><FONT color=#000000>这条件怎么满足?</FONT></P>
[align=right][color=#000066][此贴子已经被作者于2007-8-9 21:08:30编辑过][/color][/align]
回复:(奔跑的鸟)好长...if(iw==0&&ih==0&a...
这是图片尺寸条件吧~怎么满足是什么意思?[align=right][color=#000066][此贴子已经被作者于2007-8-9 21:14:33编辑过][/color][/align]
就是,他下面的语句好象永远也不会被执行哦
回复:(奔跑的鸟)就是,他下面的语句好象永远也不会被...
<P>好像是有点~应该是“或”吧~?</P>[align=right][color=#000066][此贴子已经被作者于2007-8-9 21:29:20编辑过][/color][/align]
你 这两张 图显示的挺好的,但是我用自己的一个 bmp 图就没有这么幸运了 <br>
回复:(vfdff)你 这两张 图显示的挺好的,但是我用自...
哪里啊~上头图片被屏蔽了~~[em03]显示的乱七八糟啊回复:(leopardxp)回复:(vfdff)你 这两张 图显示...
你是说 你程序显示的时候,呈现乱码?<BR>反正你这里添出来的两个图片我能看得清楚,确实很好的,没有看出什么坐标有问题回复:(vfdff)回复:(leopardxp)回复:(vfdff)你...
<P>你看到的是什么图片?我放的是扑克牌图片啊~这里好像不能直接贴图,所以我放我博客上了,这只是个链接,但好像被sina屏蔽了啊</P>页:
[1]
