我学习一些图象方面的知识,不知为什么,图象放大后总是黑色,无法显示别的颜色啊!
我将源代码附上,设置的是白色,但显示的总是黑色,大家请帮忙!

解决方案 »

  1.   

    源代码如下:
    //更改光标形状
      BeginWaitCursor(); 
      CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
      CDib * pDib = pDoc->m_pDibInit;
      LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
      // 判断是否是8-bpp位图
      if (lpBMIH->biBitCount != 8)
       {
       // 提示用户
       MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
                   MB_ICONINFORMATION | MB_OK);
       // 返回
       return;
    }
      // 创建新DIB(此函数创建一个新的CDIB,只是没有分配图象数据的内存和数据)
      CDib * pDibDst = new CDib(CSize(2*pDib->m_lpBMIH->biWidth,
                       2*pDib->m_lpBMIH->biHeight),8);
      // 分配图象数据内存,并拷贝图象数据
      pDibDst->m_lpImage = (LPBYTE) new char[pDibDst->m_dwSizeImage];
      CSize sizeImage = pDibDst->GetDimensions();
      int nWidth= sizeImage.cx ;
      int nHeight= sizeImage.cy ;
      LPBYTE  lpImage = pDibDst->m_lpImage;
      // 图像在计算机在存储中的实际大小
      CSize sizeImageSave= pDibDst->GetDibSaveDim();
      // 图像在内存中每一行象素占用的实际空间
      int nSaveWidth = sizeImageSave.cx;
      for(int y=0; y<nHeight ; y++ )
         for(int x=0 ; x<nWidth ; x++ )
         { *(lpImage+y*nSaveWidth+x)=255;}
      // 判断缩放是否成功
      if (!pDibDst->IsEmpty())
        {
         // 替换DIB,同时释放旧DIB对象
         pDoc->m_pDibInit=pDibDst
         // 设置脏标记
        pDoc->SetModifiedFlag(TRUE);
        // 更新视图
        pDoc->UpdateAllViews(NULL);}
        else
        {
         // 提示用户
         MessageBox("失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);}
         // 恢复光标
         EndWaitCursor();
      

  2.   

    数字图像编程那本书上的吗?建议你用gdi+,容易多了,可来信[email protected]
      

  3.   

    代码没问题,可能是你的视图类的问题,再不然打开DEBUG看看目标图象像素到底变化了没有?