2016-08-09 3 views
-3

EDIT: Хорошо, после нескольких ответов я сделаю несколько исправлений:потоп инициализации алгоритм заполнения с ++

byte r, g, b; 
    scr->GetRGB(mid.x, mid.y, (byte)& r, (byte)& g, (byte)& b); 
    while (r != (byte)0 && g != (byte)0 && b != (byte)0) 
    { 
     scr->SetRGB(mid.x, mid.y, (byte)255, (byte)0, (byte)0); 
     mid.x++; 
     FloodFill(scr, mid); 
     mid.x--; 
     mid.x--; 
     FloodFill(scr, mid); 
     mid.y++; 
     FloodFill(scr, mid); 
     mid.y--; 
     mid.y--; 
     FloodFill(scr, mid); 
    } 

Plus, прежде чем сделать что-нибудь с параметрами, это функция GetRGB:

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]; 
} 

И это SetRGB Функция:

void CDIB32::SetRGB(int x, int y, BYTE r, BYTE g, BYTE b) 
{ 
    //ASSERT(x < Width() && y < Height()); 

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

предположение пользователя OzMiz правильно, что линия вызывает Ошибка. Извинения за отсутствие ясности. И этот алгоритм действительно является отрывом из этого точного алгоритма, о котором вы думали. Любая идея о том, как сделать это лучше, ценится.

+0

Не подлежит ответственности. – LogicStuff

+1

Код выглядит очень сломанным для меня (например, это условие 'while'!). Я предлагаю найти лучший пример для работы. –

+0

Какова подпись функций 'GetRGB()' и 'SetRGB()'? И на какой именно строке происходит ошибка? – Alnitak

ответ

0

Я предполагаю, что вы получаете сообщение об ошибке для этой линии:

scr->GetRGB(mid.x, mid.y, (byte)& r, (byte)& g, (byte)& b); 

Последние три аргумента являются адресами, и вы пытаетесь бросить их в ценности. Я думаю, что это будет решить вашу ошибку:

scr->GetRGB(mid.x, mid.y, (byte*)& r, (byte*)& g, (byte*)& b); 
+0

ITYM просто '& r' - если' GetRGB' ожидает 'byte *', тогда нет необходимости в трансляции. – Alnitak

+0

и на самом деле он, кажется, ожидает 'BYTE &' – Alnitak

+1

Хм .. Я не уверен ... возможно, компилятор ссылается на & r как BYTE & expression? Мы обязательно должны убедиться, что подпись GetRGB. – OrMiz

3

Сообщение об ошибках свидетельствует о том, что функция GetRGB ожидает параметры RGB, чтобы быть BYTE&, то есть ссылки на байты.

Вы должны поэтому объявлять локальные r, g и b переменные соответственно, и просто передать их прямо к функции:

BYTE r, g, b; 
scr->GetRGB(mid.x, mid.y, r, g, b); 

Ваш цикл while также сломана - вам нужно использовать && или || присоединиться три условия, а не оператор ,.

+0

Когда я это делаю, компилятор кода и программа запускаются, но активирование этой функции вызывает необработанное исключение. – Erthain

+0

@ Erthain, когда вы делаете то, что именно, и какое исключение, в какой строке? – Alnitak

+0

@ Erthain, но при догадывании вы превышаете границы изображения ... – Alnitak

Смежные вопросы