Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Madgeniy от Февраль 10, 2011, 14:20



Название: Падает обращение к QImage.pixel(x,y)
Отправлено: Madgeniy от Февраль 10, 2011, 14:20
Всем доброго времени суток.
Есть проблема.

Код:
bool Compressor::EqualFiles(QFileInfo fileInfo, QFileInfo resFile){
    QImage image1,image2;
    bool result;
    unsigned int a,b;
    int x,y;

    result = true;
    if (image1.load(fileInfo.absoluteFilePath()) && image2.load(resFile.absoluteFilePath())) {
        if ((image1.width() == image2.width() && (image1.height() == image2.height()))) {
            for (x = 0; x < image1.width(); x++)
                for (y = 0; y < image1.height(); y++) {
                    a = image1.pixel(x,y);
                    b = image2.pixel(x,y);
                    if (a != b) {
                        result = false;
                        break;
                    }
                }
        }
        else result = false;
    }
    else result = false;
    return result;
}

При вызове
Код:
 b = image2.pixel(x,y);

Происходит падение. В лог приложения пишется:

Цитировать
ASSERT failure in QVector<T>::at: "index out of range", file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 338

В чем причина и как рыть не очень представляю. Кто-нибудь сталкивался с таким?


Название: Re: Падает обращение к QImage.pixel(x,y)
Отправлено: twp от Февраль 10, 2011, 16:23
а зачем ручное сравнение? есть же такая тема
Код:
bool QImage::operator== ( const QImage & image ) const


Название: Re: Падает обращение к QImage.pixel(x,y)
Отправлено: Madgeniy от Февраль 10, 2011, 16:35
Это не работает. С аналогичной ошибкой. В предыдущих версиях это не работало на некоторых файлах, там даже в справке было что-то подобное написано.


Название: Re: Падает обращение к QImage.pixel(x,y)
Отправлено: ufna от Февраль 10, 2011, 17:01
А оба изображения точно загружены?


Название: Re: Падает обращение к QImage.pixel(x,y)
Отправлено: Madgeniy от Февраль 10, 2011, 22:18
Да, условие

Цитировать
if (image1.load(fileInfo.absoluteFilePath()) && image2.load(resFile.absoluteFilePath()))
срабатывает


Название: Re: Падает обращение к QImage.pixel(x,y)
Отправлено: Fat-Zer от Февраль 11, 2011, 02:54
на прямую к делу скорей всего не относится, но "break" у вас выходит только из внутреннего цикла.


Название: Re: Падает обращение к QImage.pixel(x,y)
Отправлено: Madgeniy от Февраль 11, 2011, 12:59
Да, точно  ;D
Но в чем дело с изображением понять не могу пока что.


Название: Re: Падает обращение к QImage.pixel(x,y)
Отправлено: Madgeniy от Февраль 11, 2011, 13:12
Выяснил, что падает минимум на одной картинке из всех, которыми тестю. Картинка формата PNM. В чем дело однако пока все равно не ясно)
Картинки для сравнения в аттаче.