unsigned char *m_recImg中存放着文件数据,图像是1072*1028字的大小,如何显示在对话框中?下面是我从网上找的程序,运行出错.在对话框中还添加了一个picture类型的控件,不知道如何使用。只要灰度显示在对话框中即可,求教高手!谢谢
         CDC*   pDC;
CBitmap   bitmapmatrix; 
int   i=bitmapmatrix.CreateBitmap(m_iImgWidth,m_iImgHeight,1,32,m_recImg); 
CDC   dcCompMatrix; 
dcCompMatrix.CreateCompatibleDC(pDC);   //出错
dcCompMatrix.SelectObject(&bitmapmatrix);   //出错
int   k=pDC-> BitBlt(0,0,m_iImgWidth,m_iImgHeight,&dcCompMatrix,0,0,SRCCOPY); 

解决方案 »

  1.   

    简单的,你可以使用IPicture接口。此外VC里面也提供了Image控件什么的,非要和这个几个API较劲的话,你的pDC貌似没有初始化啊。
      

  2.   

    CDC* pDC;
    你的指针都没有分配内存就直接用了,
    CDC* pDC = GetDC();
      

  3.   

    void CDlgPaintDlg::OnPaint() 
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CPaintDC dc(this); // device context for painting
    ::CoInitialize(NULL);  // COM 初始化
    HRESULT hr;
    CFile file;

    file.Open( "c:\\aa.bmp", CFile::modeRead | CFile::shareDenyNone );  // 读入文件内容
    DWORD dwSize = file.GetLength();
    HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
    LPVOID lpBuf = ::GlobalLock( hMem );
    file.Read( lpBuf, dwSize );
    file.Close();
    ::GlobalUnlock( hMem );

    IStream * pStream = NULL;
    IPicture * pPicture = NULL;

    // 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
    hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
    ASSERT ( SUCCEEDED(hr) );

    hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
    ASSERT(hr==S_OK);

    long nWidth,nHeight;  // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
    pPicture->get_Width( &nWidth );    // 宽
    pPicture->get_Height( &nHeight );  // 高

    ////////原大显示//////
    CSize sz( nWidth, nHeight );
    dc.HIMETRICtoDP( &sz );  // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
    pPicture->Render(dc.m_hDC,0,0,sz.cx,sz.cy,
    0,nHeight,nWidth,-nHeight,NULL);

    if ( pPicture ) pPicture->Release();// 释放 IPicture 指针
    if ( pStream ) pStream->Release();  // 释放 IStream 指针,同时释放了 hMem

    ::CoUninitialize();
    CDialog::OnPaint();
    }
    }========
    贴段IPicture显示图片的例子,你参考参考。
      

  4.   

    正解。pDC不初始化是不能用的。
      

  5.   

    谢谢各位。pDC初始化后,图片可以显示。
    1 但是不是灰度的,都是绿色的,能看出来一点儿图像的本来面目
    2 而且对话框一旦最小化图像就没有了。
    3 如何控制图像显示的位置
      

  6.   

    BitBlt函数的前两个参数就是图像相对窗口的起始位置
      

  7.   

    在OnDraw函数或OnPaint函数中实现你那个代码,就不会消失了。
      

  8.   

    http://topic.csdn.net/t/20020421/18/664807.html
    看看这个链接,或许对你有帮助。
      

  9.   

    谢谢各位。我的图像数据通过fread到m_recImg中,显示的图像就是绿的,隐约能看到图像。但我做测试把m_recImg中全都赋值从0到255,看到是由浅到深的灰度显示,就不是彩色的了