Russian Qt Forum
Март 29, 2024, 15:59
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Дополнительные компоненты
>
Картиночки
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Картиночки (Прочитано 17850 раз)
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Картиночки
«
:
Декабрь 11, 2016, 22:33 »
Какое-то время я работал над библиотечкой, которая могла бы заменить текущие имаджформаты в Qt (да, они не совершенны).
Что-то получилось:) Прежде, чем выдавать на суд кутешникам, спрошу мнения здесь - понятно ли, что вообще за зверь, зачем это надо.
Возможно, будут какие-то предложения.
Документация
Сорцы
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Картиночки
«
Ответ #1 :
Декабрь 12, 2016, 14:12 »
Думается о "замене текущих форматов" лучше умолчать, а упирать на dds. Напр назвать это хозяйство "dds format support". А dds уже может содержать много чего (мипы, фреймы и др). И "problematic" если не убрать то засунуть в конец
Если же планы шире (мол, dds только частный случай) - то нужны доп пояснения, напр какие приложения смогут прочесть записанное
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Картиночки
«
Ответ #2 :
Декабрь 12, 2016, 17:08 »
Цитата: Igors от Декабрь 12, 2016, 14:12
Думается о "замене текущих форматов" лучше умолчать, а упирать на dds.
Ну так-то все понимают, что текущие имадж форматы не очень (например, нельзя записать gif, ico, icns, это ограничение API). Проблема что их некому развивать, последний коммит там пару месяцев назад был.
Цитата: Igors от Декабрь 12, 2016, 14:12
Если же планы шире (мол, dds только частный случай) - то нужны доп пояснения, напр какие приложения смогут прочесть записанное
В целом, добавить примеров можно.
К сожалению, я не близок к миру 3д графики, поэтому не очень в курсе, как используется тот же DDS и какие задачи с ним на практике (ну кроме зафигачить файл целиком на видюху, это не к плагинам)
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Картиночки
«
Ответ #3 :
Декабрь 13, 2016, 00:10 »
Как видится,
Код:
Optional<ImageContents> maybeContents = reader.read();
if (!maybeContents) {
qWarning() << "Error reading image:" << reader.error().errorString();
return 1;
}
ImageContents contents = *maybeContents;
тут Optional<> - избыточная конструкция. Я бы предпочел такое:
Код:
ImageContents contents = reader.read();
if (!contents.isValid()) {
qWarning() << "Error reading image:" << reader.error().errorString();
return 1;
}
Абсолютно неочевиден смысл операции *maybeContents, да она по сути и не нужна.
«
Последнее редактирование: Декабрь 13, 2016, 00:12 от Racheengel
»
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Картиночки
«
Ответ #4 :
Декабрь 13, 2016, 06:29 »
Цитата: Racheengel от Декабрь 13, 2016, 00:10
Абсолютно неочевиден смысл операции *maybeContents ...
Согласен полностью
Записан
Юра.
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Картиночки
«
Ответ #5 :
Декабрь 13, 2016, 10:41 »
Цитата: Racheengel от Декабрь 13, 2016, 00:10
Абсолютно неочевиден смысл операции *maybeContents, да она по сути и не нужна.
Сейчас есть такая бага:
Код:
QImageReader reader("empty.png");
auto image = reader.read();
if (image.isNull()) {
qWarning() << reader.errorString(); // ooops there was no error, image is really null
}
Возможно, лучше передавать по результат по ссылке, а возвращать error код.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Картиночки
«
Ответ #6 :
Декабрь 13, 2016, 11:20 »
Еще можно возвращать std::pair<ImageIOError, ImageContents>, как делает std::map::insert.
Дело в том, что в 17х плюсах обещают python-like возврат множественых значений из ф-ии (путем возврата std::pair/std::tuple и их автоматического разворачивания).
Тогда юзание будет какое-то такое:
Код:
ImageIo reader("file.png");
auto [ok, contents] = reader.read();
if (!ok) {
qWarning() << ok.errorString();
}
/// ...
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Картиночки
«
Ответ #7 :
Декабрь 13, 2016, 17:42 »
Цитата: Авварон от Декабрь 12, 2016, 17:08
Ну так-то все понимают, что текущие имадж форматы не очень
Ну как "не очень" - необходимость просто загрузить одну картинку (без затей) всегда была и будет.
Цитата: Авварон от Декабрь 12, 2016, 17:08
(например, нельзя записать gif, ico, icns, это ограничение API).
Вот на это и напирайте, мол multiply images support и все такое. И список этих новых поддержек ставьте первым
Цитата: Авварон от Декабрь 12, 2016, 17:08
К сожалению, я не близок к миру 3д графики, поэтому не очень в курсе, как используется тот же DDS и какие задачи с ним на практике (ну кроме зафигачить файл целиком на видюху, это не к плагинам)
Я впервые услышал о dds. Вообще 3D и OpenGL - очень разные вещи/запросы. Volume Texture - это чисто дела OpenGL, и, насколько мне известно, успехи с ней невелики т.к. сделано явно тупо - гигантский объем, ноль интеллекта. Гораздо интереснее/перспективнее форматы воксельной графики.
Карты отражения/окружения широко используются везде, вариаций много. Напр есть еще angular (круг), fish, skyDome и др. Шесть имеджей - ну это уже все больше "дань истории", еще лет 5 назад меня попросили конвертировать их в cross (не те времена чтобы экономить % имеджа). Нельзя сказать что какой-то формат заметно лучше, напр многие юзают старый добрый spherical.
Мипы - ну тоже дела OpenGL. Мульти-фреймы - таких форматов мало, гораздо чаще используют просто "набор файлов" (с именами типа file00000.jpg, file00001.jpg, file00002.jpg, и.т.д) или же мувик
Особняком стоят форматы с большей точностью или большим диапазоном. Популярен .exr, да и хотя бы 2 байта на канал (ushort) - дело нужное
В общем все как-то приспособились.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Картиночки
«
Ответ #8 :
Декабрь 13, 2016, 18:51 »
Цитата: Igors от Декабрь 13, 2016, 17:42
Ну как "не очень" - необходимость просто загрузить одну картинку (без затей) всегда была и будет.
Да, но не делать же отдельное АПИ на каждый тип картинок, их количество весьма ограничено.
У меня только psd не поддерживаются, потому что яхз, что там у "ей внутре".
Цитата: Igors от Декабрь 13, 2016, 17:42
Вот на это и напирайте, мол multiply images support и все такое. И список этих новых поддержек ставьте первым
Ок
Цитата: Igors от Декабрь 13, 2016, 17:42
Я впервые услышал о dds. Вообще 3D и OpenGL - очень разные вещи/запросы. Volume Texture - это чисто дела OpenGL, и, насколько мне известно, успехи с ней невелики т.к. сделано явно тупо - гигантский объем, ноль интеллекта. Гораздо интереснее/перспективнее форматы воксельной графики.
Ну основной юзкейз dds - это плоские 2д текстуры. Современные видюхи умеют работать напрямую с DDS. Например, в Cтаркрафте все текстуры хранятся в dds.
Цитата: Igors от Декабрь 13, 2016, 17:42
Мипы - ну тоже дела OpenGL. Мульти-фреймы - таких форматов мало, гораздо чаще используют просто "набор файлов" (с именами типа file00000.jpg, file00001.jpg, file00002.jpg, и.т.д) или же мувик
А как же иконки?
Цитата: Igors от Декабрь 13, 2016, 17:42
Особняком стоят форматы с большей точностью или большим диапазоном. Популярен .exr, да и хотя бы 2 байта на канал (ushort) - дело нужное
Как я уже упоминал, это просто еще один формат для QImage, никакого нового АПИ тут не нужно.
Таких форматов туда можно много напихать (в том же dds их около сотни (!) поддерживается)
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: Картиночки
«
Ответ #9 :
Декабрь 13, 2016, 22:43 »
Меня интересуют некоторые операции которые технически я не знаю как реализовать с пом. Qt , это:
- создание файлов *.ico; (требуется для windows приложений)
- установка прозрачного фона для картинок (постоянно требуется для создания пиктограмм приложений).
Скажите с пом. "Картиночек" это можно будет реализовать?
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Картиночки
«
Ответ #10 :
Декабрь 14, 2016, 11:55 »
Цитата: Авварон от Декабрь 13, 2016, 18:51
У меня только psd не поддерживаются, потому что яхз, что там у "ей внутре".
Там своя песня, упор на "слои" которые могут всяко-разно комбинироваться, часто с помощью масок.
Цитата: Авварон от Декабрь 13, 2016, 18:51
А как же иконки?
Трехмерщику такая мелочь неинтересна, если там пикселей с гулькин нос - ничего путного не отрендерить
Цитата: Igors от Декабрь 13, 2016, 17:42
Как я уже упоминал, это просто еще один формат для QImage, никакого нового АПИ тут не нужно.
Таких форматов туда можно много напихать (в том же dds их около сотни (!) поддерживается)
Не думаю что все так просто, во всяком случае эти форматы имеют свои специфичные данные. И неясно как "трактовать" содержимое имеджа (bits()). Если в родных данных то как рисовать, иначе родные надо где-то еще хранить.
Пример: популярная задача "terranizer". Юзер мазюкает чего-то (напр в фотошопе) и отдает картинку плагину который по ней строит "горы", где цвет белее - гора выше, темнее - ниже. Казалось бы, все просто и даже примитивно. И тут выясняется что 256 значений высоты - это очень мало, горы получаются явно "ступеньками". Фотошоп сможет делать бОльший диапазон, но читать-то это нечем. Поэтому "2-bytes textures support" - реальная, крутая фича
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Картиночки
«
Ответ #11 :
Декабрь 14, 2016, 13:15 »
Цитата: panAlexey от Декабрь 13, 2016, 22:43
- создание файлов *.ico; (требуется для windows приложений)
Да, это один из основных юзкейзов.
Цитата: panAlexey от Декабрь 13, 2016, 22:43
- установка прозрачного фона для картинок (постоянно требуется для создания пиктограмм приложений).
На чтении или записи? На чтении сейчас можно сделать
QImageReader::setBackgroundColor
На запись - как картинку запишите, так и будет.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Картиночки
«
Ответ #12 :
Декабрь 14, 2016, 14:43 »
Цитата: Авварон от Декабрь 13, 2016, 10:41
Цитата: Racheengel от Декабрь 13, 2016, 00:10
Абсолютно неочевиден смысл операции *maybeContents, да она по сути и не нужна.
Сейчас есть такая бага:
Код:
QImageReader reader("empty.png");
auto image = reader.read();
if (image.isNull()) {
qWarning() << reader.errorString(); // ooops there was no error, image is really null
}
Возможно, лучше передавать по результат по ссылке, а возвращать error код.
Не вижу бага тут, ну пустая картинка и пустая.
Уберите Optional вообще, а в ImageContents добавьте что-то вроде isValid().
А еще что то типа ImageContents::toImage() например.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Картиночки
«
Ответ #13 :
Декабрь 14, 2016, 15:06 »
Цитата: Racheengel от Декабрь 14, 2016, 14:43
Не вижу бага тут, ну пустая картинка и пустая.
Уберите Optional вообще, а в ImageContents добавьте что-то вроде isValid().
А еще что то типа ImageContents::toImage() например.
Пустая картинка возвращается в двух случаях - либо была ошибка, либо файл содержит пустую картинку. Как вы эти 2 случаях собираетесь различать?
Насчёт isValid(). Разделение QString::isEmpty/QString::isNull считается ошибочным и в Qt6 его уберут.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Картиночки
«
Ответ #14 :
Декабрь 14, 2016, 15:07 »
Exception же!
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...