在TC2.0下,隶属于16位子系统,所以int是2字节,long是4字节,char是1字节。绘图系统模式是VGA,颜当然也很有限,所以读取bmp像素后需要把像素颜转换为“最近”的已有VGA颜。用int GetColor(int r,int g,int b)实现返回一个颜值(color code)。用putpixel(int x,int y,int color)绘制一个像素。 (读bmp处尚有问题,会有读取像素时未读出字节的问题出现,原因尚待查。。。。) #include <graphics.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <alloc.h>
int MAX_Y=480;
int MAX_X=640;
int COLORS[15][4]=
{
中国科学院科学数据库 /* Red Green Blue,code */
{ 0, 0, 0, 0}, /* Black */
{ 0, 0,255, 1}, /* Blue */
{ 0,128, 0, 2}, /* Green */
通讯世界 { 0,255,255, 3}, /* Cyan */
{255, 0, 0, 4}, /* Red */
张之洞路 {255, 0,255, 5}, /* Magenta */
{165, 42, 42,20}, /* Brown */
{211,211,211, 7}, /* LightGray */
{169,169,169,56}, /* DarkGray */
{173,216,230,57}, /* LightBlue */
{144,238,144,58}, /* LightGreen */
{238,144,144,60}, /* LightRed? */
{238,144,238,61}, /* LightMegenta? */
{255,255, 0,62}, /* Yellow */
{255,255,255,63} /* WhITe */
};
/* pixel : keep channel order wITh readfile order */
typedef struct _PIXEL
{
unsigned char b;
unsigned char g;
unsigned char r;
} PIXEL;
typedef struct _BITMAPFILEHEADER
{
int type;
long fileSize;
long reserved;
long offbITs;
} BITMAPFILEHEADER,*PBITMAPFILEHEADER;
typedef struct _BITMAPINFOHEADER
{
long dwSize;
long width;
long height;
int planes;
int bpp;
long compression;
long sizeImage;
long hResolution;
long vResolution;
long colors;
long importantColors;
} BITMAPINFOHEADER,*PBITMAPINFOHEADER;
int GetColor();
void ReadImage();
增殖税void DrawAxes();
void main()
{
int driver,mode,i,j;
char c,string[255],filename[255];
printf("input the filename of bITmap file:\n");
scanf("%s",filename);
driver=DETECT;
mode=IBM8514HI;
inITgraph(&driver,&mode,"");
/* draw a bITmap */
ReadImage(filename);
c=getch();
closegraph();
}
/* read pixels from imagefile and display */
void ReadImage(char* filename)
{
FILE* stream;
char string[255];
int i,j,width,height,color;
unsigned long bytesRead;
BITMAPFILEHEADER FileHeader,*pFileHeader;
BITMAPINFOHEADER InfoHeader,*pInfoHeader;
unsigned char *pPixels,red,green,blue;
pFileHeader=&FileHeader;
pInfoHeader=&InfoHeader;
stream=fopen(filename,"rb");
if(stream==NULL)
{
printf("open file error!\n");
exIT(0);
}
fseek(stream,0,0);
fread(pFileHeader,1,sizeof(FileHeader),stream);
fread(pInfoHeader,1,sizeof(InfoHeader),stream);
height=pInfoHeader->height;
/* padding for 4 bytes */
if(pInfoHeader->width%4 !=0)
width=(pInfoHeader->width/4+1)*4;
else
width=pInfoHeader->width;
pPixels=malloc(width*3);
for(j=height-1;j>=0;j--)
{
memset(pPixels,0,width*3);
fseek(stream,pFileHeader->offbITs+j*width*3, 0);
bytesRead=fread(pPixels,1,width*3,stream);
if(bytesRead!=width*3)
{
sprintf(string,"bytesRead=%d j=%d",bytesRead,height-3-j);
outtextxy(400,280,string);
}
for(i=0;i <width;i++)
{
red = pPixels[i*3+2];
green = pPixels[i*3+1];
blue = pPixels[i*3];
color=GetColor(red,green,blue);
putpixel(100+i,height+100-j,color);
}
}
free(pPixels);
setcolor(63);
rectangle(100,100,100+width,100+height);
忍耐是一种美丽
/* Draw X and Y axes */
DrawAxes(width,height);
if(stream!=NULL)
{
fclose(stream);
}
setcolor(3);
outtextxy(100,30,filename);
getch();
}
/* compute a color code by RGB */
int GetColor(unsigned int red,unsigned int green,unsigned int blue)
{
int i,index=0;
unsigned long dist,temp;
temp=195075;
中医美容论文