下列是我的一个程序
我每次设计的时候,都发现 用GetPixel得到的值都是 0X FF FF FF FF ;
就是一幅全黑的图,也是 这个值,理论黑色的像素点应该 是  COLORREF 型的 值 0X 00 00 00 00 ;我想问的是,是不是 我的设备指针 pDC 所指的 对像不对??
我的程序基本思路是,取得像素点的值,如果 大于 a的值,nAa 自加 ,hAa  加上 大于a的 值Max Min 两个函数不用说了ColorToGray 是把 GetPixel(i,j)取得的COLORREF 型 RGB 值 value 转化成 灰度值??
void CStatisticalLandscapeFeaturesView::OnSlfCal(CDC *pDC) 
{
CSize BitmapSize;
  int i=0,j=0;  pDC=GetDC(); for(a=0;a<256;a++)// 这个剖面值要循环
{
BitmapSize=m_pBitmap.GetBitmapDimension();
n_x=32;//BitmapSize.cx;
n_y=32;//BitmapSize.cy;
 
for(i=0;i<n_x-1;i++)
  for( j=0;j<n_y-1;j++)
  if(ColorToGray(pDC,i,j)>a){ nAa++; hAa= hAa +ColorToGray(pDC,i,j)-a;}
else {nBa++; hBa = hBa +a-ColorToGray(pDC,i,j);} num_above[a] = nAa;
num_below[a] = nBa;
h_up[a]  = hAa;
h_below[a]  = hBa; }
}

解决方案 »

  1.   

    要用SelectObject将位图选到pDC中,另外,最好创建一个兼容的DC,不要直接使用GetDC得到的DC
      

  2.   

    if(ColorToGray(pDC,i,j)>a)
    应该传递指针的指向地址if(ColorToGray(&pDC,i,j)>a){
      

  3.   

    orbit
    能不能给一段代码,说明一下怎么建立兼容的DC,
    我现在用
    pDC->SelectObject(&m_pBitmap);把位图选进来了,但是没有差别呀??
      

  4.   

    orbit 
    我的这段代码中(载入位图)void CStatisticalLandscapeFeaturesView::OnDraw(CDC *pDC)
    {
      CStatisticalLandscapeFeaturesDoc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
     
      CRect rect 
      CDC m_pdcMem;<----------------这个是不是兼容的 CDC

     
    hBitmap =(HBITMAP) LoadImage(NULL, "Bmp\\slf.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION );
      if(!hBitmap) return;
      m_pBitmap.Attach(hBitmap);

      m_pdcMem.CreateCompatibleDC(pDC);
      m_pdcMem.SelectObject(&m_pBitmap);
      GetClientRect(&rect);
     
      pDC->StretchBlt(0,0,rect.right,rect.bottom,&m_pdcMem,0,0,rect.right,rect.bottom,SRCCOPY); 
      //m_pBitmap.Detach();
    }
      

  5.   

    两种修改方法可能可以解决(未试验):
    1、pDC=GetDC(); // 删除此行, DC指针用外面传进来的
    2、在pDC=GetDC();后面再SelectObject一次另外,你应该保证程序在运行时在最前端,如果设置了断点的话应该设在GetPixel后面,否则取到的是调试程序IDE界面的颜色值(白色:0xFFFFFFFF)