新手想用C写一个图片查看器,遇难了~~help!
我想写一个只能查看BMP格式的图片文件查看器(BMP格式简单点),程序的思路是这样的:
1,读取BMP文件,取得文件头,图片数据内容.
2,根据文件头的信息,(比如宽度,高度等),利用SetPixel函数一个一个点地画出图来.
可是出现了一些问题:
可以查看100*100左右的小位图文件,显示正常,但是当显示大一点的文件时,图像会出现徐徐的,而且色彩失真了,变得好像有点黑白,我都不知道怎么回事.
正常的图片查看器用C是怎么编写的呢??不用别的什么图形库,用原始的C写.
以下是我的代码:
FILE *fp;
char buff[100];
char photoBuff[90000],*p,*prgb;
BITMAPFILEHEADER *hdr; //位图文件头
BITMAPINFOHEADER *info; //位图文件头信息
static RGBQUAD *rgbs; //存储图片数据
int i,j,index,error;
static int row,column; //图片的行列
switch (message)
{
case WM_CREATE:
fp = fopen("d:/1.bmp","rb");
fread(buff,1,sizeof(buff),fp);
hdr = (BITMAPFILEHEADER*)buff;
info = (BITMAPINFOHEADER*) (buff+sizeof(BITMAPFILEHEADER));
rgbs = (RGBQUAD*)malloc(sizeof(RGBQUAD)* (info->biHeight*info->biWidth));
fseek(fp,hdr->bfOffBits,SEEK_SET);
fread(photoBuff,1,sizeof(photoBuff),fp);
fclose(fp);
p = photoBuff;
prgb= (char*)rgbs;
error = (info->biHeight*info->biWidth);
for(i=0;i< error;i++){
*(prgb+i*4) = *p;
*(prgb+i*4+1) = *(p+1);
*(prgb+i*4+2) = *(p+2);
p+=3;
}
row = info->biHeight;
column= info->biWidth;
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
index =0;
for(i=0;i<row;i++){
for(j=0;j<column;j++,index++){
SetPixel(hdc,j+100,(row-i),RGB(rgbs[index].rgbRed, rgbs[index].rgbGreen , rgbs[index].rgbBlue));
}
}
EndPaint (hwnd, &ps) ;
return 0 ;
[解决办法]
BitBlt
[解决办法]