Russian Qt Forum
Октябрь 02, 2024, 09:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Падает обращение к QImage.pixel(x,y)  (Прочитано 3632 раз)
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

В чем причина и как рыть не очень представляю. Кто-нибудь сталкивался с таким?
Записан
twp
Гость
« Ответ #1 : Февраль 10, 2011, 16:23 »

а зачем ручное сравнение? есть же такая тема
Код:
bool QImage::operator== ( const QImage & image ) const
Записан
Madgeniy
Гость
« Ответ #2 : Февраль 10, 2011, 16:35 »

Это не работает. С аналогичной ошибкой. В предыдущих версиях это не работало на некоторых файлах, там даже в справке было что-то подобное написано.
Записан
ufna
Гость
« Ответ #3 : Февраль 10, 2011, 17:01 »

А оба изображения точно загружены?
Записан
Madgeniy
Гость
« Ответ #4 : Февраль 10, 2011, 22:18 »

Да, условие

Цитировать
if (image1.load(fileInfo.absoluteFilePath()) && image2.load(resFile.absoluteFilePath()))
срабатывает
Записан
Fat-Zer
Гость
« Ответ #5 : Февраль 11, 2011, 02:54 »

на прямую к делу скорей всего не относится, но "break" у вас выходит только из внутреннего цикла.
Записан
Madgeniy
Гость
« Ответ #6 : Февраль 11, 2011, 12:59 »

Да, точно  Смеющийся
Но в чем дело с изображением понять не могу пока что.
Записан
Madgeniy
Гость
« Ответ #7 : Февраль 11, 2011, 13:12 »

Выяснил, что падает минимум на одной картинке из всех, которыми тестю. Картинка формата PNM. В чем дело однако пока все равно не ясно)
Картинки для сравнения в аттаче.
« Последнее редактирование: Февраль 11, 2011, 13:14 от Madgeniy » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 21.