我的程序片断:
         rgb1=GetPixel(hdc,x,y);
rgb2=GetPixel(hdc,x,y);
在调试时,有时rgb1等于rgb2;有时两个值不相等,rgb2经常等于0xffffffff.
Why?????????

解决方案 »

  1.   

    0xffffffff是CLR_INVALID的意思,表示你指定的坐标象素超过你hdc所指定的范围,其他的要把你程序贴出来才能分析了
      

  2.   

    应该不会超过hdc的范围,因为如果超过的话,rgb1和rgb2的值都该为0xffffffff,而实际情况经常是rgb1=0x0000000,rgb2=0xffffffff
     注: (x,y)是一个白色的点。
      

  3.   

    rgb1=GetPixel(hdc,x,y);
    rgb2=GetPixel(hdc,x,y);
    这两句是写在一起的吗?看看是不是HDC不对啊,在语句前加个判断语句测一下,你的问题最好要把程序贴出来才好解决
      

  4.   

    对不起 (x,y)是一个黑色的点。
    以下是程序,主要目的是对一个封闭图形进行边界填充。(边界为黑色)
    算法对不对还不知道。
    void FillFast::DrawItem(HDC hdc,POINT pts)
    {
        StackList Stack;
        long x=pts.x,y=pts.y;
        POINT temp;
        COLORREF rgb=RGB(0,0,0),rgb1,rgb2;
        while (rgb3=GetPixel(hdc,x,y))
              x--;
        rgb1=GetPixel(hdc,x,y);
        rgb2=GetPixel(hdc,x,y);
        temp.x=x+1;temp.y=y;
        Stack.Push(temp);
        while (!Stack.Empty())
        {
    POINT p=Stack.Pop();x=p.x;y=p.y;
    BOOL FlagUp,FlagDown;
    COLORREF rgbUp=GetPixel(hdc,x,y-1);
             COLORREF rgbDown=GetPixel(hdc,x,y+1);
    if (rgbUp)
    {
    while (GetPixel(hdc,x,y-1))
    x--;
    temp.x=x+1;temp.y=y-1;Stack.Push(temp);
    }
    if (rgbDown)
    {
    while (GetPixel(hdc,x,y+1))
    x--;
    temp.x=x+1;temp.y=y+1;Stack.Push(temp);
    }
    FlagUp=!(BOOL)rgbUp;
    FlagDown=!(BOOL)rgbDown;
    while (GetPixel(hdc,x,y))
    {
                SetPixel(hdc,x,y,rgb);
    if (!GetPixel(hdc,x,y-1))
    FlagUp=TRUE;
                      else
    {
        if (FlagUp)
               {
               temp.x=x;temp.y=y-1;
        Stack.Push(temp);
        FlagUp=FALSE;
    }
    }
    if (!GetPixel(hdc,x,y+1))
    FlagDown=TRUE;
    else
    {
       
        if (FlagDown)
    {
    temp.x=x;temp.y=y+1;
        Stack.Push(temp);
        FlagDown=FALSE;
    }
    }
    x++;
    }
    }
    }
      

  5.   

    首先 while (rgb3=GetPixel(hdc,x,y))就有错误嘛!怎么就=了,这不变成赋值了吗?语句执行前先判断一下HDC是否有效,语句执行完了就马上判断一下,应该是没问题啊,你好象判断语句都没加上去嘛!
      

  6.   

    我是api的初学者,请问怎么判断hdc有没有效?
      

  7.   

    我是api的初学者,请问怎么判断hdc有没有效?
      

  8.   

    一般说来,从函数获得句柄如果不成功的话都是等于NULL的,你上面的那个函数里穿过来的HDC不知道是系统给你填上的还是你自己的程序里传过来的。如果是你自己程序传过来的,则在你获得这个句柄后判断一下其是否为NULL就可以了,还有要判断一下你的X,Y是否超界,HDC如果是窗口句柄,可以用GETWINDOWRECT获得其范围,然后判断X,Y值是否超界。
      

  9.   

    TO  chinacyy(野人) : while (rgb3=GetPixel(hdc,x,y)) 这句话是对的,C 语言还有很多类似的语法,可以把人搞糊涂。
    TO  wabcde ():
        rgb1=GetPixel(hdc,x,y);
        rgb2=GetPixel(hdc,x,y);
    这两句在单任务操作系统中执行的结果肯定一致,
    但是在Windows这样的多任务环境里却未必。
    问题在于第一句执行完后,执行第二句之前是否有其他的进程改变了屏幕。
    比如你在执行了第一句后,切换到DEV看值,这个过程就改变了屏幕颜色。
    看过值后又执行第二句,当然得到不同的颜色。
      

  10.   

    to upstairsdc的东西不会随便变的
      

  11.   

    同意楼上的楼上的看法,你用TRACE看,不要断点调试,断点调试的话极有可能出来这种问题
      

  12.   

    你用Sleep(0);睡一下吧. 我也遇见过这种问题, 可能是获取的时候没有时间执行动态库线程.Sleep一下就好了. :)
      

  13.   

    rgb1=GetPixel(hdc,x,y);
    Sleep(0);
    rgb2=GetPixel(hdc,x,y);
      

  14.   

    to winthegame(120斤重的大青蛙) 
    还是不行,加不加Sleep(0)都一样。
      

  15.   

    原来是要填充区域。用FloodFill不就行了么?
      

  16.   

    我也想用FloodFill,可老师不让我用