RTGetPixel无用

解决方案 »

  1.   

            hwnd=::GetDesktopWindow();
    hdc =::GetDC(hwnd);  
    i=::GetDeviceCaps(hdc,HORZRES);
    j=::GetDeviceCaps(hdc,VERTRES);
    mdc=::CreateCompatibleDC(hdc);
    bitmap=::CreateCompatibleBitmap(hdc,i,j);
    oldbitmap=(HBITMAP)SelectObject(mdc,bitmap);
    ::BitBlt(mdc,0,0,i,j,hdc,0,0,SRCCOPY);
    cout<<hdc<<"  "<<i<<"   "<<j<<"  ";
    for(i;i>=0;i--)
    for(j;j>=0;j--)
    if(GetPixel(mdc,i,j)!=0xffffffff)
    cout<<GetPixel(mdc,i,j)<<endl;
      

  2.   

    GetPixel返回值是多少
    你可以用GetDIBits得到位图的数据
      

  3.   

    CreateDIBSection 用这个函数生成一个位图载入内存,获得一个以图片颜色数据写成的缓冲区的指针。可以通过计算得到某点的颜色,大概这样能解决。试试
      

  4.   

    查了无数资料,纠结了一整天终于有点头绪了,希望对其他人有帮助。
                         
            HDC hdc,mdc;
    HWND hwnd;
            int i,j;
    HBITMAP bitmap,oldbitmap;
    BITMAPINFO bi;
    RGBTRIPLE* rp;       //表示颜色的结构,3个字节,在24位真彩色中分别是B,G,R
    BITMAPINFOHEADER bih;//位图文件头的信息,以下有初始化
    VOID   *lpBits;      //用于指向位图数据缓冲区的指针由CreateDIBSection函数第四个参数返回,用B,G,R三个字节表示
            hwnd=::GetDesktopWindow();
    hdc =::GetDC(hwnd);   //获取整个屏幕的HDC
            i=::GetDeviceCaps(hdc,HORZRES);
    j=::GetDeviceCaps(hdc,VERTRES);
    bih.biSize=sizeof(BITMAPINFOHEADER);
    bih.biWidth=i;
    bih.biHeight=j;
    bih.biPlanes=1;
    bih.biBitCount=24;
    bih.biCompression=BI_RGB;
    bih.biSizeImage=i*j;
    bih.biClrUsed=0;
    bih.biClrImportant=0;
    bi.bmiHeader=bih;
    mdc=::CreateCompatibleDC(hdc);//创建一个屏幕兼容的内存DC
    bitmap=CreateDIBSection(hdc,&bi,DIB_RGB_COLORS,&lpBits,NULL,0);
    oldbitmap=(HBITMAP)SelectObject(mdc,bitmap);
    ::BitBlt(mdc,0,0,i,j,hdc,0,0,SRCCOPY);//位图载入
    rp=(RGBTRIPLE*)lpBits;//缓冲区指针传递给RGBTRIPLE型
             COLORREF color=quse(rp,776,333);    //比如返回某点坐标的颜色
             cout<<(int)GetRValue(color)<<" "<<(int)GetGValue(color)<<" "<<(int)GetBValue(color);   
             ::SelectObject(mdc,oldbitmap);     
            ::DeleteDC(mdc);
    ::DeleteDC(hdc);
    ::DeleteObject(bitmap);
    ::CloseHandle(hwnd);    
     
    基本上算是实现了目标。因为装入缓冲区时是从位图的左下角的第一个像素点开始,先从左到右,再从下到上,最后装入右上角的最后一个像素点。以下是取缓冲区颜色的函数。 //取某一个坐标在位图中的颜色,返回COLORREF型,假设的分辨率是1440,900
    COLORREF quse(RGBTRIPLE *rp,const long x, const long y)
    {
    long n,i;
    i=899-y;
    n=1440*i+x;
    return RGB(rp[n].rgbtRed,rp[n].rgbtGreen,rp[n].rgbtBlue);
    }