#include "fstream.h"//24bit bitmap
bool CBitmapWindow::LoadFile (char *bmpFile)
{
FILE *fp;
if((fp=fopen(bmpFile,"rb"))==NULL)
return false;
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
BITMAPINFOHEADER bih;
fread(&bfType,sizeof(WORD),1,fp);
if(bfType!=0x4d42)
return false;
fread(&bfSize,sizeof(DWORD),1,fp);
fread(&bfReserved1,sizeof(WORD),1,fp);
fread(&bfReserved2,sizeof(WORD),1,fp);
fread(&bfOffBits,sizeof(DWORD),1,fp);
fread(&bih,sizeof(BITMAPINFOHEADER1),1,fp);
nWidth=bih.biWidth ;
nHeight=bih.biHeight;
if(nWidth % 4 !=0)
nWidth=nWidth+ (4-nWidth % 4); //修正位图宽度值
DWORD size=nWidth*bih.biBitCount/8*nHeight;
arrayColor=new ZafLogicalColor[nWidth*nHeight];
// LPSTR pData=new char[size];
unsigned char* pData=new unsigned char[size];
fread(pData,size,1,fp);
int bmWidthBytes=nWidth*bih.biBitCount /8;
int bmBitsPixel=bih.biBitCount ;
int nBit=bmBitsPixel/8;
colorTableBitmap* clrTableBmp;
clrTableBmp=new colorTableBitmap[nWidth*nHeight];
char cBit[40];
int z;
for (int y=0;y<nHeight;y++)
{
for (int x=0;x<nWidth;x++)
{
z=nHeight-y-1;
clrTableBmp[y*nWidth+x].nIndex =y*nWidth+x;
clrTableBmp[y*nWidth+x].iBlue =pData[x*nBit+z*bmWidthBytes];
clrTableBmp[y*nWidth+x].iGreen =pData[x*nBit+1+z*bmWidthBytes];
clrTableBmp[y*nWidth+x].iRed=pData[x*nBit+2+z*bmWidthBytes];
sprintf(cBit,",%d:%d:%d:%d",y*nWidth+x,pData[x*nBit+z*bmWidthBytes],
pData[x*nBit+1+z*bmWidthBytes],
pData[x*nBit+2+z*bmWidthBytes]);
}
}
delete []clrTableBmp;
delete []pData;
fclose(fp);
return true;
网上代码是这样的。。可是我不明白,不知道怎么关联我的本地已有的图片,希望您能搞教诲下。。谢谢,不甚感激
å¯ä»¥çä¸å¦ä¸çæä½ï¼
1ãå¾çæ件æ¯æåºå®æ ¼å¼çï¼åBMPå¾çæ¯æ件头+ä½å¾çé¢è²æ°æ®ã
æ件头ä¸è¬å¨è¯»åçæ¶åæ¯ä½¿ç¨ä¸é¢ç代ç ï¼
BITMAPFILEHEADER fileheader={0};2ãæ件读å°è¿éäºå°±è¦è¯»å°ä½å¾çé¢è²æ°æ®äºï¼é£ä¹å¨è¯»ååï¼éè¦ç¥éæ°æ®ç大å°ï¼è¿æ ·æè½æåé å ·ä½å¤§å¦çç¼å²åºï¼ä¹åææ°æ®å®æ´ç读åå°ç¼å²åºå ã
é£ä¹è®¡ç®ä½å¾æ°æ®ç大å°ä¸è¬ç¨ä¸é¢ç代ç å»åã
int totalSize = (bmpWidth *biBitCount/8+3)/4*4*bmpHeight;3ãå¨è¿äºå·¥ä½åå®ä¹åï¼å°±ä½¿ç¨freadå½ä»¤ç´æ¥è¯»åæ件å 容å³å¯ï¼ç´å°è¯»å°æ件ç»æã
æ´ä¸ªå ·ä½ç代ç å®ç°å¦ä¸ï¼
FILE *fp=NULL;