c语言调用图片

请教高手,我有BMP的图片,位置D:\a.bmp,请问在C中怎么调用他,请给个有说明 的程序

第1个回答  2013-09-13
c语言调用图片函数
据我所知Matlab有,imshow(),c好象没有,c只能先将图片读到内存中,经过相关处理后以一定的格式保存到硬盘中,然后再打开图片.
读图和存图需要有专门的函数,这些可以参考:
unsigned char* ReadBMPData(int Width, int Height, char *fname)//图像的宽和高,图像的位置(包括后缀)
{
unsigned char* image = new unsigned char[Width*Height];
FILE *fp;
fp = fopen(fname, "rb");
fread(image, 1, Width*Height, fp);
fclose(fp);
return image;
}
///////////////////////////
void WriteRawData(unsigned char* image, int Width, int Height, char *fname)
{
FILE *fp;
fp = fopen(fname, "wb");
fwrite(image, 1, Width*Height, fp);
fclose(fp);
}
第2个回答  2013-09-13
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <dos.h>
#include <process.h>
#include <bios.h> void selectpage(char page) /* 换页函数 */
{
union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=page; /* 选择页面 */
int86(0x10,&r,&r);
} unsigned char set_SVGA_mode(int Vmode) /* 设置SVGA屏幕模式 */
{
union REGS r;
r.x.ax=0x4f02;
r.x.bx=Vmode;
int86(0x10,&r,&r);
return(r.h.ah);
}unsigned int get_SVGA_mode() /* 获取SVGA屏幕模式 */
{
union REGS r;
r.x.ax=0x4f03;
int86(0x10,&r,&r);
return(r.x.bx);
}void main()
{
char buffer[640],page_new=0,page_old=0;
int i,j,k,n,r,g,b,savemode;
long position,width,length;
FILE *fp;
puts("This is a 256 color bmp viewer!");
puts("Input filename:"); /* 输入要显示的BMP文件路径 */
gets(buffer);
if((fp=fopen(buffer,"rb"))==NULL)
{
printf("can't open file:%s",buffer);
return;
}
fseek(fp,28,SEEK_SET);
fread(&i,2,1,fp);
if(i!=8) /* 检查是否为256色位图 */
{
puts("Not a 256 color bitmap!");
fclose(fp);
exit(0);
}

fseek(fp,18,SEEK_SET);
fread(&width,4,1,fp);
savemode=get_SVGA_mode(); /* 先保存原来的屏幕模式 */
set_SVGA_mode(0x101); /* 硬件无关性初始化屏幕为640×480 256色模式 */
fseek(fp,54,SEEK_SET);
for(i=0;i<256;i++) /* 按照该图片的DAC色表设置色彩寄存器 */
{
b=fgetc(fp);
g=fgetc(fp);
r=fgetc(fp); /* 获取R、G、B分量 */
outportb(968u,i);
outportb(969u,r>>2);
outportb(969u,g>>2);
outportb(969u,b>>2);
fgetc(fp);
}

k=(width%4)?(4-width%4):0; /* 宽度修正值 */
for(j=length-1;j>=0;j--)
{
fread(buffer,width,1,fp);
for(i=0,n=0;i<width;i++,n++)
{
position=j*640l+i; /* 计算要显示点的显存位置 */
page_new=position/65536l; /* 计算显示页 */
if(page_new!=page_old) /* 当显示页不同时更换页面,提高一定的输出速度 */
{
selectpage(page_new);
page_old=page_new;
}
pokeb(0xa000,position%65536l,buffer[n]); /* 写到显存位置 */
}
fseek(fp,k,SEEK_CUR); /* 每行绘制完后修正宽度 */
}
fclose(fp);
bioskey(0);
set_SVGA_mode(savemode); /* 恢复屏幕 */
}
第3个回答  2013-09-13
图片也是一个文件,
1.你是要打开图片吗?(把图像显示出来?)
2.还是只需要图片文件。
如果是1,那么你需要看.bmp的编码方式和C库的图像类函数
如果是2,那么你就可以用fopen,fread,fwrite,fprintf,fscanf等调用即可。本回答被网友采纳
相似回答