至少要先知道BMP格式的数据是如何存储的,网上很多资料,我在linux下写过,我给你部分代码吧bool CBitmap::LoadBitMap(const char *lpszFileName, unsigned long ulTransColor, bool bTransparent, int x, int y)
{
FILE *fp = fopen(lpszFileName, "r+b");
if (!fp)
{
return false;
} BITMAPFILEHEADER bmpheader;
BITMAPINFOHEADER bmpInfo;
int i, j, offset;
unsigned short biBitCount;
unsigned long color = 0; fread(&bmpheader, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmpInfo, sizeof(BITMAPINFOHEADER), 1, fp);
fseek(fp, bmpheader.bfOffBits, SEEK_SET);
biBitCount = bmpInfo.biBitCount;
//每读一行结束后,偏移与4字节对齐时,0的个数
offset = (4 - (bmpInfo.biWidth*biBitCount/8) % 4)%4; //读取位图数据段数据
for ( j = bmpInfo.biHeight - 1; j >= 0; j--)
{
for (i = 0; i < bmpInfo.biWidth; i++)
{
fread(&color, biBitCount/8, 1, fp);
if ( bTransparent && (color != ulTransColor) )
{
//TRACE("the color is %d\t\n", color);
dc.SetPixel(i + x, j + y, color);
}
else if (!bTransparent)
{
dc.SetPixel(i + x, j + y, color);
}

}
fseek(fp, ftell(fp) + offset, SEEK_SET);
} fclose(fp); return true;
}