我通过一些计算,得到了一个矩阵,目前这个数组是short类型的,也可以改成WORD等等。现在需要把这个矩阵在屏幕上显示为一个灰度位图。比如说一个16个元素的数组array={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}(当然我的数组不止这么大了),我的想法是在view中显示一个4×4的灰度位图,第一个象素的灰度为1,第二个象素的灰度为2,依次类推。请问有办法实现吗?我想尝试调用CreateBitmap()函数,但一直不能成功。如果用其它的函数也行。
请大侠指点!请您贴出较详细的代码,谢谢!
另外,我在“图形处理/算法 ”版和本版都发了题为《【急】请问如何用CreateBitmap()创建一个位图(100分!!)》的帖子,请回答我的问题的大侠去回一下那两篇帖子,这样我好加分给您,好吗!

解决方案 »

  1.   

    不要用函数!!
    给你位图显示!!BOOL CDIPDibDoc::OnOpenDocument(LPCTSTR lpszPathName) 
    {
    if (!CDocument::OnOpenDocument(lpszPathName))
    return FALSE;

    // TODO: Add your specialized creation code here
    if( m_pDib )
    delete [] m_pDib; m_pDib=new CDib(lpszPathName);

    if(m_pDib->IsValid())
    {
    SetTitle(lpszPathName);
    long TotalPixels = m_pDib->GetWidth()*m_pDib->GetHeight();
    }
        
    else
    DeleteContents();

    SetModifiedFlag(FALSE);
    UpdateAllViews(0); return TRUE;
    }CDIPDibDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if(pDib)
    {
    BeginWaitCursor(); lpDIBBits = pDib->GetDibData();
    lHeight = pDib->GetHeight();
    lWidth = pDib->GetWidth();
    lLinebits = WIDTHBYTES( 8*lWidth );


    SetScrollSizes(MM_TEXT, CSize(lWidth, lHeight));
    pDib->Draw(pDC->m_hDC, 0, 0, lWidth, lHeight, 
    0, 0, lWidth, lHeight, DIB_RGB_COLORS, SRCCOPY);

    EndWaitCursor();
    }
    显示完毕!
      

  2.   

    这里lpDIBBits 是指向当前象素的指针!!你只需要更改它的 值就可以了!!你要显示
    4×4的图!
    那么lWidth ,lHeight 都是4,重新申请内存!!之后!
    lWidth = 4;
    lHeight = 4;
    delete [] lpDIBBits;
    lpDIBBits = new BYTE [lHeight*lWidth];
    for( i=0;i<lHeight*lWidth;i++ )
    {
        *(lpDIBBits+i) = i;
    }这是具体的算法!!如果你还不明白,
    给我发邮件[email protected]
      

  3.   

    同时我可以把它保存成bmp图片,或数据格式!!
      

  4.   

    我觉得很简单应该。就用真彩色,只是其余分量为0,就行了,如(r,g,b),r,g为0,b为你数组中的值,这样画出来的图就是灰度的。
      

  5.   

    如(r,g,b),r,g为0,b为你数组中的值,这样画出来的图就是灰度的。
    只有r=g=b = 数组中的值才是灰度的吧!!
      

  6.   

    是我错了,只有r=g=b = 数组中的值才是灰度