1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Problem_Displaying_bmp_Image

Discussion in 'MFC' started by MFC New Bee, Dec 14, 2010.

  1. MFC New Bee

    MFC New Bee New Member

    Joined:
    Dec 9, 2010
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    Hi all,
    Presently i am creating a doc/view application in which i read a bmp file's structures like BITMAPFILEHEADER , BITMAPINFOHEADER , COLOR PALETTE and bmBits after that in the view with the help of 'StretchDIBits' i am displaying the bits of the bitmap image . My problem is that only half of the image is displayed can any one help me to solve this problem. Below is the given code.
    OnOpenDocument
    Code:
    BOOL CBmpInfoDoc::OnOpenDocument(LPCTSTR lpszPathName)
    {
     FILE *fp;
     fp = _wfopen(lpszPathName , (const wchar_t*) "r");
     if(fp == NULL)
     {
      return FALSE;
     }
     m_pbmiColors = new RGBQUAD[256];
     ZeroMemory(&m_bmfhFileHeader, sizeof(m_bmfhFileHeader));
     /*fread(&m_bmfhFileHeader , sizeof(BITMAPFILEHEADER) ,  1 ,fp);
      
     fread(&m_bmiInfoHead , sizeof(BITMAPINFOHEADER) , 1 , fp);*/
     fread(&m_bmfhFileHeader.bfType , sizeof(m_bmfhFileHeader.bfType) ,
       1 ,fp);
     fread(&m_bmfhFileHeader.bfSize , sizeof(m_bmfhFileHeader.bfSize) ,
       1 , fp);
     fread(&m_bmfhFileHeader.bfReserved1 , sizeof(m_bmfhFileHeader.bfReserved1) ,
        1 , fp);
     fread(&m_bmfhFileHeader.bfReserved2 , sizeof(m_bmfhFileHeader.bfReserved2) , 
        1 , fp);
     fread(&m_bmfhFileHeader.bfOffBits , sizeof(m_bmfhFileHeader.bfOffBits) , 
       1 , fp);
     fread(&m_bmiInfoHead.bmiHeader.biSize , sizeof(m_bmiInfoHead.bmiHeader.biSize) , 1 , fp);
     m_dwSize = m_bmiInfoHead.bmiHeader.biSize;
     fread(&m_bmiInfoHead.bmiHeader.biWidth , sizeof(m_bmiInfoHead.bmiHeader.biWidth) , 1 , fp);
     m_nWidth  = m_bmiInfoHead.bmiHeader.biWidth;
     fread(&m_bmiInfoHead.bmiHeader.biHeight , sizeof(m_bmiInfoHead.bmiHeader.biHeight) , 1 , fp);
     m_nHeight = m_bmiInfoHead.bmiHeader.biHeight;
     fread(&m_bmiInfoHead.bmiHeader.biPlanes , sizeof(m_bmiInfoHead.bmiHeader.biPlanes) , 1 , fp);
     m_wPlanes = m_bmiInfoHead.bmiHeader.biPlanes;
     fread(&m_bmiInfoHead.bmiHeader.biBitCount , sizeof(m_bmiInfoHead.bmiHeader.biBitCount) , 1 , fp);
     m_nBpp = m_bmiInfoHead.bmiHeader.biBitCount;
     fread(&m_bmiInfoHead.bmiHeader.biCompression , sizeof(m_bmiInfoHead.bmiHeader.biCompression) , 1 , fp);
     m_dwCompression =  m_bmiInfoHead.bmiHeader.biCompression;
     fread(&m_bmiInfoHead.bmiHeader.biSizeImage , sizeof(m_bmiInfoHead.bmiHeader.biSizeImage) , 1 , fp);
     fread(&m_bmiInfoHead.bmiHeader.biXPelsPerMeter , sizeof(m_bmiInfoHead.bmiHeader.biXPelsPerMeter) , 1 , fp);
     m_lHorzResolution = m_bmiInfoHead.bmiHeader.biXPelsPerMeter;
     fread(&m_bmiInfoHead.bmiHeader.biYPelsPerMeter , sizeof(m_bmiInfoHead.bmiHeader.biYPelsPerMeter) , 1 , fp);
     m_lVertResolution = m_bmiInfoHead.bmiHeader.biYPelsPerMeter;
     fread(&m_bmiInfoHead.bmiHeader.biYPelsPerMeter , sizeof(m_bmiInfoHead.bmiHeader.biYPelsPerMeter) , 1 , fp);
     fread(&m_bmiInfoHead.bmiHeader.biClrUsed , sizeof(m_bmiInfoHead.bmiHeader.biClrUsed) , 1 , fp);
     fread(&m_bmiInfoHead.bmiHeader.biClrImportant , sizeof(m_bmiInfoHead.bmiHeader.biClrImportant) , 1 , fp);
     int nNoOfPalette = pow(double(2) , double(m_bmiInfoHead.bmiHeader.biBitCount));
     if(m_bmiInfoHead.bmiHeader.biBitCount <= 8)
     {
      for(int nId = 0 ; nId < nNoOfPalette ; nId++)
      {
       fread(&m_pbmiColors[nId].rgbBlue    , sizeof(m_pbmiColors) , 1 , fp);
       fread(&m_pbmiColors[nId].rgbGreen      , sizeof(m_pbmiColors) , 1 , fp);
       fread(&m_pbmiColors[nId].rgbRed     , sizeof(m_pbmiColors) , 1 , fp);
       fread(&m_pbmiColors[nId].rgbReserved   , sizeof(m_pbmiColors) , 1 , fp);
      }
     }
     int nSize = WIDTHBYTES((m_bmiInfoHead.bmiHeader.biWidth)* ((DWORD)m_bmiInfoHead.bmiHeader.biBitCount)) *
           m_bmiInfoHead.bmiHeader.biHeight;
     m_bmBits = new BYTE[nSize];
     fread(m_bmBits , sizeof(m_bmBits) , nSize , fp);
     m_bFlag = TRUE;
     return TRUE;
    }
    Draw Method
    Code:
    void CBmpInfoView::OnDraw(CDC* pDC)
    {
     CDC* memDC;
     BITMAPINFO m_bmiInfoHead;
     BITMAPINFO *m_pbmiInfo;
     BITMAPFILEHEADER* m_BitmapFileHeader;
     pDoc = GetDocument();
     if(pDoc->GetFlagState() == FALSE)
     {
      return;
     }
     SelectClipRgn(pDC->GetSafeHdc(), NULL);
     m_bmiInfoHead = pDoc->GetBitInfoHead();
     m_BitmapFileHeader = &pDoc->GetBitMapFileHeader();
     m_pbmiInfo = (BITMAPINFO*)(m_BitmapFileHeader + 1);
     BYTE *bits = (BYTE*)m_BitmapFileHeader + m_BitmapFileHeader->bfOffBits;
     bits = (BYTE*)pDoc->GetbmBits();
     m_pbmiInfo = &m_bmiInfoHead;
     StretchDIBits(pDC->GetSafeHdc() , 0 , 0 , m_bmiInfoHead.bmiHeader.biWidth , m_bmiInfoHead.bmiHeader.biHeight ,
          0 , 0 , m_bmiInfoHead.bmiHeader.biWidth , m_bmiInfoHead.bmiHeader.biHeight , bits ,
          m_pbmiInfo , DIB_PAL_COLORS, SRCCOPY);
    }
     
    Last edited by a moderator: Dec 14, 2010

Share This Page