1

画像 (犬の輪郭) を赤色で塗りつぶすフラッド フィル メソッドを作成しています。

私の TestShellDlg.cpp はフラッド フィル メソッドです。CTestShellDlg::m_pScreenDib メンバーは、グラフィックを格納して描画する CDIB32 ビットマップ クラスです。

現在のピクセルをサンプリングし、黒 (アウトラインの色) でない場合は赤くします。これは、Dib32.cpp クラスのゲッターです。

void CDIB32::GetRGB(int x, int y, BYTE& r, BYTE& g, BYTE& b)
{
    if (x >= Width() || y >= Height())
        IERROR;

    int off = y * ByteWid() + x * 4;
    b = m_pBits[off];
    g = m_pBits[off+1];
    r = m_pBits[off+2];
}

そして、これが TestShellDlg.cpp クラスの私のフラッドフィル メソッドです。

void CTestShellDlg::FloodFill(CPoint& mid)
{

    //while the current pixel colour is not black, set it to red and recursively loop
    m_pScreenDib ->GetRGB(mid.x,mid.y, (byte)& r,(byte)& g,(byte)& b);
        while(r !=(byte)0, g !=(byte)0, b !=(byte)0)
        {
            m_pScreenDib -> SetRGB(mid.x, mid.y,(byte)255,(byte) 0,(byte) 0);
            mid.x++;
            FloodFill(mid);
            mid.x--;
            FloodFill(mid);
            mid.y++;
            FloodFill(mid);
            mid.y--;
            FloodFill(mid);
        }

}

問題は、r、g、b が定義されていないと言っていることです。理由はわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

1

それらを使用する前に宣言する必要があります (パラメーター リストでインラインで宣言することはできません)。

byte r,g,b;
m_pScreenDib ->GetRGB(mid.x,mid.y, (byte)& r,(byte)& g,(byte)& b);
于 2013-06-27T08:33:08.653 に答える