我得到一幅图片后,然后把图象信息存于BITMAP结构中,我是否可以从结构中读取每个像素点的值然后存在数组中,然后按像素点一个一个点画到屏幕上,请给我些提示参考,谢谢?

解决方案 »

  1.   

    BITMAP的bmBits成员是图像数据。
    SetPixel画点
      

  2.   

    StretchDIBits函数,写在view类里
      

  3.   

    将BMP文件加载到resourse里,取名为ID_MYBITMAP.然后在OnDraw函数里
    CDC MemDC;  //定义内存设备文本对象
    CBitmap bm;    //定义CBitmap对象
    bm.LoadBitmap(IDB_MYBITMAP); //装载位图资源
    MemDC.CreateCompatibleDC(pDC);//创建内存设备文本对象
    MemDC.SelectObject(&bm);//将位图选入内存设备文本对象
    BITMAP tmp;
    bm.GetBitmap(&tmp); //获得位图参数
    pDC->BitBlt(20,20,tmp.bmWidth,tmp.bmHeight,&MemDC,0,0,SRCCOPY);
    bm.DeleteObject();
    就可以显示了。
      

  4.   

    画上去是可以但是必须按照BMP图像的格式才能把图像正确的显示出来。
      

  5.   

    我把图像数据都取出来了,但是想新建一个文档,把图像重新画回去,显示出问题!
    我用的周长发的《精通visual C++图像处理》一书中的CDib类
    void CViewDIBDoc::OnScree() 
    {
    // TODO: Add your command handler code here
              //新建文档
    int count=0;
    CString strTitle="";
    strTitle.Format("Window %d",count++); CDocTemplate *pDocTemp=NULL;
    CViewDIBDoc* pDoc=NULL;
    pDocTemp=GetDocTemplate();
    ASSERT_VALID(pDocTemp);
    pDoc=(CViewDIBDoc*)pDocTemp->CreateNewDocument();
    pDoc->SetTitle(strTitle);

    LPBITMAPINFOHEADER lpbi;
    pDoc->m_pDib->m_hDib = CreateDefaultDIB(320,160);//新建DIB,并把所有像素都置白色
    lpbi=(LPBITMAPINFOHEADER)GlobalLock(pDoc->m_pDib->m_hDib);
    pDoc->m_pDib->Create((LPBYTE)lpbi);
    CFrameWnd* pFrame=pDocTemp->CreateNewFrame(pDoc,NULL);
    pDocTemp->InitialUpdateFrame(pFrame,pDoc); 
    }  不论怎么修改像素的值,总是显示黑色
      

  6.   

    可以实现了,把所有点SetPixel到内存dc后,内存dc中的图象要比客户区大,该怎么调整内存dc图象的大小
      

  7.   

    内存DC图象你就找下缩放的函数了.不过,你直接保存这个大的不可以吗?显示BITMAP,再存BITMAP,应该没什么问题口啊.