下列是我的一个程序
我每次设计的时候,都发现 用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; }
}
我每次设计的时候,都发现 用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; }
}
应该传递指针的指向地址if(ColorToGray(&pDC,i,j)>a){
能不能给一段代码,说明一下怎么建立兼容的DC,
我现在用
pDC->SelectObject(&m_pBitmap);把位图选进来了,但是没有差别呀??
我的这段代码中(载入位图)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();
}
1、pDC=GetDC(); // 删除此行, DC指针用外面传进来的
2、在pDC=GetDC();后面再SelectObject一次另外,你应该保证程序在运行时在最前端,如果设置了断点的话应该设在GetPixel后面,否则取到的是调试程序IDE界面的颜色值(白色:0xFFFFFFFF)