LPBYTE m_lpDIBits;
DWORD m_dwImageSize; m_lpDIBits 为存储除去位图文件头,位图信息头,调色板后的位图数据(宽是8象素,高是40的单色位图)
pFile->Read(m_lpDIBits, m_dwImageSize);m_dwImageSize为位图信息头中的以字节为单位的图象大小
m_dwImageSize = m_lpBMPHdr->biSizeImage;为什么m_dwImageSize的大小是160??  m_lpDIBits为只存储160个字节的位图数据???不是说单色位图中的每个像素对应1个数据位吗???我要读取每个象素的点阵数据时应该怎样做????

解决方案 »

  1.   

    假如图像宽高width、height,若要得到(i,j)像素的数据result,
    k = j*height+i)/8;
    l = j*height+i)%8;
    result = (m_lpDIBits[k]&(1<<l))>>l;
      

  2.   

    单色位图每个像素只占一个bit楼上把高宽搞倒了byte = (j * width + i) / 8;
    bit = (j * width + i) % 8;
    result = (m_lpDIBits[byte] & (1 << bit)) ? 1 : 0;
      

  3.   


    int bytes,bit,results,i,j;
    int array[8];
    for(i = 0;i < m_lpBMPHdr->biHeight;i++ )
    { for(j = 0;j<m_lpBMPHdr->biWidth; j++)
    {
              bytes = (j * m_lpBMPHdr->biWidth + i) / 8;
    bit = (j * m_lpBMPHdr->biWidth + i) % 8;
    results = (m_lpDIBits[bytes] & (1 << bit)) ? 1 : 0;
    array[j] = results;

    }
    }我刚按照楼上的朋友的方法去取值,array中的数据不对????另外是否应该从最底行开始读取