| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9130 人关注过本帖
标题:如何显示读取BMP图片?
只看楼主 加入收藏
xiaowu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-5-19
收藏
得分:0 
      阿弥陀佛
2005-06-04 17:59
飞舞留香
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2005-4-18
收藏
得分:0 
2005-06-05 08:21
ajey2004
Rank: 1
等 级:新手上路
帖 子:164
专家分:0
注 册:2004-12-30
收藏
得分:0 

2005-06-05 14:47
zushuboderen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2005-12-24
收藏
得分:0 
wwo我晕,不懂啊.........

冷静点............. 耐心点.............
2006-01-30 11:48
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用天使预备役在2004-11-14 14:07:00的发言:

//INCLUDE ----
#include <conio.h>
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
//MAIN ----
void main(void)
{
FILE *fp_bmp;
int gdriver,gmode;
int maxx,maxy;
int leng[4];
int bit;
struct hua
{
int head;
int w;
int h;
} image;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"");
maxx=getmaxx();
maxy=getmaxy();
if((fp_bmp=fopen("e:\\bc31\\fangkuai.bmp","rb"))==NULL)
{
setcolor(YELLOW);
settextstyle(2,0,8);
//setusercharsize(2,1,4,1);
outtextxy(maxx/2-80,maxy/2,"Can't open the file!");
getch();
closegraph();
exit(1);
}
fseek(fp_bmp,0x0A,SEEK_SET);
image.head=fgetc(fp_bmp);
image.w=0;
image.h=0;
//printf("%04X",image.head);
fseek(fp_bmp,0x12,SEEK_SET);
for(int i=0;i<4;i++)
{
leng[i]=fgetc(fp_bmp);
}
image.w=leng[0]+leng[1]*255+leng[2]*255*255+leng[3]*255*255*255l;
fseek(fp_bmp,0x16,SEEK_SET);
for(i=0;i<4;i++)
{
leng[i]=fgetc(fp_bmp);
}
image.h=leng[0]+leng[1]*255+leng[2]*255*255+leng[3]*255*255*255l;
//printf("%d %d\t",image.w,image.h);
int ln=(image.w+7)/8;
int line_word=(image.w+31)/32*4;
getch();
int biao=0x01;
fseek(fp_bmp,image.head,SEEK_SET);
for(i=image.h;i>0;i--)
{
for(int j=0;j<line_word;j++)
{
if(j>ln)
{bit=fgetc(fp_bmp);}
else
{
bit=fgetc(fp_bmp);
for(int k=0;k<8;k++)
{
int bit1=bit&(biao<<k);
if(bit1!=0)
putpixel(j*8+8-k,10+i,YELLOW);
else
putpixel(j*8+8-k,10+i,RED);
}
}
}
}
getch();
fclose(fp_bmp);
}

这我写的,不过有很多乱的地方,各位见笑了!!!

显示的图象根本就是乱码

高手解决一下

2006-02-05 15:27
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

缺少注释,太难看了


淘宝杜琨
2006-02-05 20:34
YF1042
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-1-30
收藏
得分:0 



/*我也是从别人那里抄来的,希望对你有点用*/
/*************2色,16色非压缩BMP位图显示程序****************/

/*******功能: 可以在指定位置输出图片,
可用作该格式的图片浏览器********/

#include <stdio.h>
#include <graphics.h>
#include <alloc.h>
#include <stdlib.h>
#include <math.h>

typedef struct tagBITMAPFILEHEADER
{
unsigned int bfType;
unsigned long bfSize;
unsigned int bfReserved1;
unsigned int bfReserved2;
unsigned long bfOffBits;
}BITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER
{
unsigned long biSize;
long biWidth;
long biHeight;
unsigned int biPanes;
unsigned int biBitCount;
unsigned long biCompression;
unsigned long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
unsigned long biClrUsed;
unsigned long biClrImportant;
}BITMAPINFOHEADER;

typedef struct tagRGBQUAD
{
unsigned char rgbBlue;
unsigned char rgbGreen;
unsigned char rgbRed;
unsigned char rgbReserved;
}RGBQUAD;

typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[];
}BITMAPINFO;

int xmax;
int ymax;

main()
{
char *filename = "";
printf("Input a 16BMP: ");
scanf("%s",filename);
InitGraph();
load_bmp(100,100,filename); /*在TC目录下的某个位图文件名(*.bmp)或者该文件的完整路径*/
getch();
}

/*-----------图形模式初始化------------*/
InitGraph()
{
int gd,gm;
gd=DETECT;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
cleardevice();
xmax=getmaxx();
ymax=getmaxy();
}


void Exit(char *ErrorCode)
{
printf("%s",ErrorCode);
printf("\n Pree any key to come back ^_^");
getch();
closegraph();
exit(0);
}

long WidthBytes(long Width,int BitCount)
{
long WBytes;
WBytes=(Width*BitCount+31)/8;
WBytes=WBytes/4*4;
return WBytes;
}

unsigned char SetPalette(int Colors,unsigned char data)
{
switch(Colors)
{
case 16:
switch(data)
{
case 1:
return 4;
case 4:
return 1;
case 3:
return 6;
case 6:
return 3;
case 9:
return 12;
case 12:
return 9;
case 11:
return 14;
case 14:
return 11;
default:
return data;
}
case 2:
if(data==1)
return 15;
else
return 0;
}
}

/*********装载BMP位图*********/
load_bmp(int x_strp, int y_strp, char *filename)
{
long i,j;
long WBytes;
int Colors;
long Height,Width;
FILE *fp;
void *Temp=NULL;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
unsigned char SrcData,data;
InitGraph();
if((fp=fopen(filename,"rb"))==NULL)
{
Exit("Can Not Open The File.\n");
}
fread(&bfh,sizeof(BITMAPFILEHEADER),1,fp);
if(bfh.bfType!='M'*256+'B')
{
Exit("This Is Not A Bmp File.\n");
}
fread(&bih,sizeof(BITMAPINFOHEADER),1,fp);
Height=bih.biHeight;
Width=bih.biWidth;
WBytes=WidthBytes(Width,bih.biBitCount);
Colors=1<<bih.biBitCount;
if(!(Colors==16||Colors==2))
{
Exit("This Programme Only For 16 Colors Bitmap.\n");
}
fread(Temp,sizeof(RGBQUAD),Colors,fp);
for(i=Height-1;i>=0;i--)
{
fseek(fp,54+Colors*sizeof(RGBQUAD)+i*WBytes,SEEK_SET);
for(j=0;j<Width;j++)
{
switch(Colors)
{
case 16:
if(j%2==0)
{
fread(&SrcData,1,1,fp);
data=SetPalette(Colors,SrcData/16);
putpixel(j+x_strp,Height-1-i+y_strp,data);
}
else
{
data=SetPalette(Colors,SrcData%16);
putpixel(j+x_strp,Height-1-i+y_strp,data);
}
break;
case 2:
if(j%8==0)
{
fread(&SrcData,1,1,fp);
data=SetPalette(Colors,(SrcData>>7)%2);
putpixel(j+x_strp,Height-1-i+y_strp,data);
}
else
{
data=SetPalette(Colors,(SrcData>>(7-j%8))%2);
putpixel(j+x_strp,Height-1-i+y_strp,data);
}
}
}
}

}


2006-02-08 00:47
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

显示BMP图片的关键的地方之一:修正每行的宽度~~~


淘宝杜琨
2006-02-08 09:51
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
这个好

但可惜只是16色的
不知道谁有256色的
2006-02-12 12:50
zp_0409
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-6-4
收藏
得分:0 
我就不去试验了 我感觉在tc里运行不了
都用到类了
难道tc也支持?!
2006-06-04 17:32
快速回复:如何显示读取BMP图片?
数据加载中...
 
   



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

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