当前位置:文库下载 > 所有分类 > IT/计算机 > 计算机软件及应用 > MFC读取显示bmp图片
免费下载此文档

MFC读取显示bmp图片


pDC->TextOut(100,200,"zouxianjian");
//////////////////////////////////////////////////////////////////////////////
if("C:\\test1.bmp"=="")
{
return;
}
FILE *fp=fopen("C:\\test1.bmp","r");
if(fp==NULL)
{
pDC->TextOut(100,200,"no file found");
return;
}

BITMAPFILEHEADER fileheader;
BITMAPINFO info;

fread(&fileheader,sizeof(fileheader),1,fp);
if(fileheader.bfType!=0x4D42)
{
pDC->TextOut(100,200,"无位图文件请选择位图文件");
fclose(fp);
return ;
}

fread(&info.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
long width=info.bmiHeader.biWidth;
long height=info.bmiHeader.biHeight;
UCHAR *buffer=new UCHAR[info.bmiHeader.biSizeImage];
fseek(fp,fileheader.bfOffBits,0);
fread(buffer,info.bmiHeader.biSizeImage,1,fp);

char w[10],h[10];
itoa(width,w,10);
itoa(height,h,10);
pDC->TextOut(10,20,w);
pDC->TextOut(20,40,h);

///////8888888888888888////////////////////////////////////////////////
if(info.bmiHeader.biBitCount==8)
{
// MessageBox("8");
int pitch;

if(width%4==0)
{
pitch=width;
}
else
{
pitch=width+4-width%4;
}

RGBQUAD quad[256];
fseek(fp,fileheader.bfOffBits-sizeof(RGBQUAD)*256,0);
fread(quad,sizeof(RGBQUAD)*256,1,fp);

if(height>0)
{
//height>0 表示图片颠倒
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)
{
int index=buffer[i*pitch+j];
UCHAR r=quad[index].rgbRed;
UCHAR g=quad[index].rgbGreen;
UCHAR b=quad[index].rgbBlue;
pDC->SetPixel(j,height-i,RGB(r,g,b));
}
}
}
else
{
for(int i=0;i<0-height;i++)
{
for(int j=0;j<width;j++)
{
int index=buffer[i*pitch+j];
UCHAR r=quad[index].rgbRed;
UCHAR g=quad[index].rgbGreen;
UCHAR b=quad[index].rgbBlue;
pDC->SetPixel(j,i,RGB(r,g,b));
}
}
}
pDC->TextOut(100,200,"8位图");
}
/////////16/////////////////////////////////////////////////////////////
else if(info.bmiHeader.biBitCount==16)
{
// MessageBox("16");
int pitch=width+width%2;

if(height>0)
{
//height>0 表示图片颠倒
if(info.bmiHeader.biCompression==BI_RGB)
{
//该模式只有555
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)
{
//5 5 5 格式
UCHAR b=buffer[(i*pitch+j)*2]&0x1F;
UCHAR g=(((buffer[(i*pitch+j)*2+1]<<6)&0xFF)>>3)+(buffer[(i*pitch+j)*2]>>5);
UCHAR r=(buffer[(i*pitch+j)*2+1]<<1)>>3;
pDC->SetPixel(j,height-i,RGB((r*0xFF)/0x1F,(g*0xFF)/0x1F,(b*0xFF)/0x1F));
}
}
}
else if(info.bmiHeader.biCompression==BI_BITFIELDS)
{
//该模式在bitmapinfohead

er之后存在RGB掩码 每个掩码1 DWORD
fseek(fp,fileheader.bfOffBits-sizeof(DWORD )*3,0);
DWORD rMask;
fread(&rMask,sizeof(DWORD ),1,fp);
if(rMask==0x7C00)
{
// 5 5 5 格式
MessageBeep(0);
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)

第1页下一页

免费下载Word文档免费下载:MFC读取显示bmp图片

(下载1-3页,共3页)

我要评论

返回顶部