| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3821 人关注过本帖
标题:关于TC显示BMP图像
只看楼主 加入收藏
yuleol
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2005-12-10
收藏
 问题点数:0 回复次数:11 
关于TC显示BMP图像

我知道可以用getimage()函数来保存屏幕上的一块图像,然后用putimage()函数输出这个图像!~~

我想问一下,有什么办法能把bmp文件读到内存后,然后用putimage()输出呢?

我看过了http://bbs.bc-cn.net/bbs/dispbbs.asp?boardid=5&id=7603&star=1这个贴子关于BMP格式的一些介绍,但还是不太明白~

希望给我个例子~

搜索更多相关主题的帖子: BMP 图像 内存 putimage 函数 
2006-07-13 13:21
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 

#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(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,"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);
}

2006-07-13 22:37
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
可以将16色位图转换为GRAPHICS的内部格式。
2006-07-13 22:38
yuleol
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2005-12-10
收藏
得分:0 

先谢了,慢慢研究一下~


兴趣是我的源动力!
2006-07-13 23:02
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 

谢谢斑竹的支持
但是请问您所要的 bmp图片有什么要求
因为我试拉下
好想不呢功能正常显示 bmp图片


~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2006-08-11 03:49
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
对BMP的要求就是要不大于分辨率尺寸的,并且是16色的图片,LZ可以下个不错的图形处理小工具XNVIEW,用以将真彩图片转换成16色位图。
2006-08-11 13:56
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
我的 油箱是 vfdff@tom.com

你能给张图片 看看 到底显示的效果怎么样吗 ??
因为我实在想不通
我甚至用黑白图片
竟然也提示要求只对 16色的 图片显示 ,而无法显示

麻烦斑竹拉!!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2006-08-11 17:55
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用一笔苍穹在2006-8-11 13:56:52的发言:
对BMP的要求就是要不大于分辨率尺寸的,并且是16色的图片,LZ可以下个不错的图形处理小工具XNVIEW,用以将真彩图片转换成16色位图。

请问 为什么 我用这个软件转成 16色的图片 后,看起来仍来很鲜艳(用系统上的图形软件打开)
但是用这个程序显示出来就不好看拉,
到底是本来就应该这样 吗??

另外请教下
怎么看这个图片是 多少色的呢 ??

[此贴子已经被作者于2006-8-12 1:28:21编辑过]


~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2006-08-12 01:19
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
你如果在用XNVIEW的话,在最底下的状态栏会有色深信息的。你上面所说的情况可以用抖动转换试试,而不要用适应转换。
2006-08-12 11:30
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
但是在 抖动转换方式下 转化的图片显示 黑白色还挺好的
但是 到 彩色的时候 ,整片的同色图是一个不是完整的连续面
中间会有方格线,而且这个方格线还不是透明的

而 用适应的时候我能显示彩色的,而且整片的同色图是一个完整的连续面

不知道什么原因 ??

[此贴子已经被作者于2006-8-15 13:01:20编辑过]


~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2006-08-15 12:48
快速回复:关于TC显示BMP图像
数据加载中...
 
   



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

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