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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QImage большие файлы  (Прочитано 10341 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Май 28, 2013, 10:03 »

painter->drawImage(screenArea.rect(), *image, imgArea.rect());
painter->drawImage(0,0,QImage("./img/1.jpg"));
рисует черным цветом (изображение точно не черное), меньшие размеры отображает корректно

команда: qDebug()<<image->size()<<QColor (image->pixel(5,5)).lightness();
вывод: QSize(6400, 3200) 151

Рисование в QGLWidget через QPainter.
« Последнее редактирование: Май 28, 2013, 10:10 от deMax » Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #1 : Май 28, 2013, 11:43 »

А в чём собственно вопрос-то? Или это просто баг репорт?
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #2 : Май 28, 2013, 13:00 »

Вопрос в том, как нарисовать картинку больших размеров.

ps. Qt 4.7.4 (из набора Qt_SDK ~1_2_1), Win7

Предположу что под линухом опять все ок будет.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #3 : Май 28, 2013, 13:07 »

Можно попробовать, например, копировать нужные данные во временный QPixmap и рисовать уже его.
Записан
Bepec
Гость
« Ответ #4 : Май 28, 2013, 13:08 »

Тестовый проект с собранным релизом и дллками кидай на файлообменник и давай ссылку. И будет тебе ответ.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 28, 2013, 14:04 »

По нынешним временам до "большого" еще далеко (до 1 Gb все работает везде). Другое дело OpenGL (карта) имеет ограничение на размер текстуры (обычно 8192), Это стоит проверить
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #6 : Май 29, 2013, 15:44 »

Тестовый проект с собранным релизом и дллками кидай на файлообменник и давай ссылку. И будет тебе ответ.
зачем релиз и библиотеки? у всех же qt стоит.
http://rghost.ru/46350884

6400x3200 рисует черным
24000х12000 не загружает
2353х3521 работает
Записан
Bepec
Гость
« Ответ #7 : Май 29, 2013, 20:25 »

Потому что каждая версия Qt имеет свой неповторимый вкус и цвет. И баг или сочетание страшных вещей в одной версии может вызвать ошибку, а в другой нет Улыбающийся
Записан
_OLEGator_
Гость
« Ответ #8 : Май 30, 2013, 08:51 »

Это не баг. QImage не предназначен для работы с такими большими изображениями.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #9 : Май 30, 2013, 12:03 »

Это не баг. QImage не предназначен для работы с такими большими изображениями.
Почему бы тогда об этом не упомянуть в документации, ну и, естественно, явным образом реализовать в коде, на уровне хотя-бы адекватного результата QImage::Format или QImage::isNull?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Май 30, 2013, 15:01 »

А, собственно, почему не предназначен? Тоже вчера столкнулся с тем, что имадж спамит в консоль про невозможность выделить память. Но в это слабо верится, на 64битной-то системе. Кто-нибудь в сорцы глядел?
Записан
_OLEGator_
Гость
« Ответ #11 : Май 30, 2013, 15:08 »

Пишут, что 32768x32768 для 16-битного цвета. И что width * height * depth_for_format должно быть меньше INT_MAX.
http://stackoverflow.com/questions/7080052/qimage-qpixmap-size-limitations
А так у меня тоже не грузились большие изображения. Но это априори неправильный подход - грузить такие изображения в память, надо либо резать, либо читать блоками.
« Последнее редактирование: Май 30, 2013, 15:12 от _OLEGator_ » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #12 : Май 30, 2013, 15:22 »

Пишут, что 32768x32768 для 16-битного цвета. И что width * height * depth_for_format должно быть меньше INT_MAX.
http://stackoverflow.com/questions/7080052/qimage-qpixmap-size-limitations
А так у меня тоже не грузились большие изображения. Но это априори неправильный подход - грузить такие изображения в память, надо либо резать, либо читать блоками.
Вы правы, я таки заглянул в код (ф-ия QImageData::create):

Код:
    // sanity check for potential overflows
    if (INT_MAX/depth < width
        || bytes_per_line <= 0
        || height <= 0
        || INT_MAX/uint(bytes_per_line) < height
        || INT_MAX/sizeof(uchar *) < uint(height))
        return 0;
Можно попробовать отрефакторить код QImage так, чтобы не было перемножений а-ля bytes_per_line*widgth*height, которые бы присваивались в int32.
К сожалению, иногда огромные картинки бывают, и невозможность ее загрузить целиком может напрягать.
Записан
Bepec
Гость
« Ответ #13 : Май 30, 2013, 15:47 »

Хм. Зачем вам такую агромадину в память?
Я после пары программ на гигантских массивах данных для себя решил, что все операции должны проводиться с минимумом данных. Нечего грузить память.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #14 : Май 30, 2013, 16:00 »

Хм. Зачем вам такую агромадину в память?
Я после пары программ на гигантских массивах данных для себя решил, что все операции должны проводиться с минимумом данных. Нечего грузить память.

Ну, всегда можно заммапить кусок памяти. Но, допустим, у вас есть картографические картинки, которые вы хотите батчпроцессить. Открыли файл, применили фильтр, записали, закрыли файл. Как считать "кусок" имаджа я не преставляю (если он не лежит как массив ARGB на диске) не городя велосипеда.
Ничего плохого нет в том, что картинка большая - главное, чтобы в память влезла.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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