Russian Qt Forum
Августа 26, 2025, 15:51
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QPainter::getPixel()? QPainter::scroll()?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QPainter::getPixel()? QPainter::scroll()? (Прочитано 8105 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
QPainter::getPixel()? QPainter::scroll()?
«
:
Января 22, 2014, 13:31 »
Добрый день
Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком".
И, чтобы не плодить однотипные темы, то же со скроллом (опять в момент рисования).
Обе ф-ции всю жизнь были в нативном рисовании. Чем их заменить при переходе на Qt?
Спасибо
«
Последнее редактирование: Января 22, 2014, 18:05 от Igors
»
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: QPainter::getPixel() ?
«
Ответ #1 :
Января 22, 2014, 14:19 »
Цитата: Igors от Января 22, 2014, 13:31
Добрый день
Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком"
Спасибо
В качестве бэкенда для рисования может использоваться OpenGL, поэтому через QPainter скорее всего никак.
Но можно попробовать добраться до backbuffer.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: QPainter::getPixel() ?
«
Ответ #2 :
Января 22, 2014, 14:31 »
Цитата: Igors от Января 22, 2014, 13:31
Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком"
Собственно, а почему он должен быть?
Цитата: Old от Января 22, 2014, 14:19
В качестве бэкенда для рисования может использоваться OpenGL, поэтому через QPainter скорее всего никак.
А может и QPrinter. Вот будет интересно спросить у принтера пиксель
«
Последнее редактирование: Января 22, 2014, 14:35 от GreatSnake
»
Записан
Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QPainter::getPixel() ?
«
Ответ #3 :
Января 22, 2014, 16:42 »
Цитата: GreatSnake от Января 22, 2014, 14:31
А может и QPrinter. Вот будет интересно спросить у принтера пиксель
А что здесь плохого? В нативняке напр
Цитировать
COLORREF GetPixel(
_In_ HDC hdc,
_In_ int nXPos,
_In_ int nYPos
);
Ну вернет какое-то дефаулт значение если контекст не поддерживает чтение, но операция-то есть
Цитата: GreatSnake от Января 22, 2014, 14:31
Собственно, а почему он должен быть?
Потому что потребность в нем совершенно естественна. Напр я хочу как-то по-своему подсветить/затемнить участок рисуемого изображения, почему я должен изыскивать подходящий blend или городить свой буфер?
Ну вот, опять придется нырять в нативняк
Записан
Bepec
Гость
Re: QPainter::getPixel() ?
«
Ответ #4 :
Января 22, 2014, 17:22 »
Чтобы узнать пиксель, нужно обратиться к холсту, а не кисти. Pixmap, нативняк - вот куда надо смотреть.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QPainter::getPixel() ?
«
Ответ #5 :
Января 22, 2014, 17:52 »
Цитата: Bepec от Января 22, 2014, 17:22
Чтобы узнать пиксель, нужно обратиться к холсту, а не кисти. Pixmap, нативняк - вот куда надо смотреть.
"Холст/кисть" - такие термины хороши чтобы начинающий побыстрее понял о чем речь. Но в разговоре профессионалов они неуместны
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #6 :
Января 22, 2014, 18:06 »
Скролла тоже не видно (чтобы не обидеть QPrinter). Или я не прав?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #7 :
Января 22, 2014, 18:10 »
Цитата: Igors от Января 22, 2014, 18:06
Скролла тоже не видно (чтобы не обидеть QPrinter). Или я не прав?
Скролла это кто?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #8 :
Января 22, 2014, 18:34 »
Цитата: Old от Января 22, 2014, 18:10
Скролла это кто?
Код:
- На Крупской выходите?
- да не Крупской, а Крупского, там еще и памятник ему стоит
Я хоть и небольшой охотник до UI, но уж базовые-то ф-ции помню. А Вы, батенька, что-то вообще поплыли
Записан
Bepec
Гость
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #9 :
Января 22, 2014, 18:40 »
offtop: Тот является профессионалом, кто может простыми словами сказать о сложном, а не тот, кто говорит сложное о простом.
Скролла и быть не может (если вы о скроллинге). Ведь есть холст и кисть. А холстом является в момент отрисоки только то, что видно.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #10 :
Января 22, 2014, 18:46 »
Цитата: Igors от Января 22, 2014, 18:34
Я хоть и небольшой охотник до UI, но уж базовые-то ф-ции помню.
Или на ходу придумываете?
Я так понимаю, что дальше вы будете искать drawTeapot, сэкономлю вам время - ее тоже нет.
«
Последнее редактирование: Января 22, 2014, 19:09 от Old
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #11 :
Января 22, 2014, 20:00 »
Цитата: Bepec от Января 22, 2014, 18:40
Скролла и быть не может (если вы о скроллинге). Ведь есть холст и кисть. А холстом является в момент отрисоки только то, что видно.
Поверьте, и то что не видно - тоже. Есть окно, мне известно что обновилось напр 10% пыкселей снизу. Чего же это я не могу сдвинуть вверх 90% и дорисовать только новые 10%? Зачем громко заявлять "быть не может" если вещь банальна/стандартна?
Цитата: Old от Января 22, 2014, 18:46
Или на ходу придумываете?
Да неужели? См QWidget::scroll который сводится к scroll_sys что использует нативные вызовы скролла. В общем, понял, спрашиваю у больного здоровье
Записан
kamre
Частый гость
Offline
Сообщений: 233
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #12 :
Января 22, 2014, 20:02 »
Цитата: Igors от Января 22, 2014, 13:31
Как мне в момент рисования прочитать пиксель(и)?
В момент рисования через public API скорее всего никак, а вообще через
QWidget::grab
.
Цитата: Igors от Января 22, 2014, 13:31
И, чтобы не плодить однотипные темы, то же со скроллом (опять в момент рисования).
Это также вряд ли можно через public API, а для прокрутки есть
QWidget::scroll
.
Цитата: Igors от Января 22, 2014, 13:31
Обе ф-ции всю жизнь были в нативном рисовании. Чем их заменить при переходе на Qt?
В Qt другая идеология же: все через события делать, вот в них и можно вызывать те самые функции, что приведены выше. QPainter API может рисовать через OpenGL, а чтение пикселей обратно из видеопамяти - операция слишком медленная.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #13 :
Января 22, 2014, 20:14 »
Цитата: Igors от Января 22, 2014, 20:00
Да неужели? См QWidget::scroll который сводится к scroll_sys что использует нативные вызовы скролла.
А как в вашем воображении соотносятся QWidget и QPainter?
Цитата: Igors от Января 22, 2014, 20:00
В общем, понял, спрашиваю у больного здоровье
Чего? Спрашиваете у здоровья? Больного?
Отойдите на время от компьютера, вы и так с ним не очень ладите, а сейчас он вас явно уделал.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QPainter::getPixel()? QPainter::scroll()?
«
Ответ #14 :
Января 22, 2014, 21:19 »
Цитата: kamre от Января 22, 2014, 20:02
В Qt другая идеология же: все через события делать, вот в них и можно вызывать те самые функции, что приведены выше. QPainter API может рисовать через OpenGL,
Я понимаю что эти операции не общие, найдется устройство которое их не поддерживает. Но с др стороны - вот QPainter рисует окно Вындоуз, вывод буферирован QImage, Чтение пикселей - на раз, скролл тоже, банальное memmove. Ладно, вот на OSX нативный контекст вместо QImage, но там это еще легче т.к. есть вызовы OC. Понятно разработчику хочется иметь все общее, но все-таки нехорошо так обрезать
Цитата: kamre от Января 22, 2014, 20:02
..а чтение пикселей обратно из видеопамяти - операция слишком медленная.
Эх, а раньше, не мудрствуя лукаво, 0xB800 или переключил порты, и в 0xA000
Не думаю что дело в низкой скорости чтения. Я вижу что если OpenGL захватил окно (или его часть) то контекста там не получить - ну как бы он возвращается, но все попытки там читать/писать - эффект нулевой. Почему - хз, возможно это проблемы конкретного ОС или GL фреймворка (очень старого)
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...