Russian Qt Forum
Августа 26, 2025, 15:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPainter::getPixel()? QPainter::scroll()?  (Прочитано 8104 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Января 22, 2014, 13:31 »

Добрый день

Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком".

И, чтобы не плодить однотипные темы, то же со скроллом (опять в момент рисования).
Обе ф-ции всю жизнь были в нативном рисовании. Чем их заменить при переходе на Qt?

Спасибо
« Последнее редактирование: Января 22, 2014, 18:05 от Igors » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Января 22, 2014, 14:19 »

Добрый день

Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком"

Спасибо
В качестве бэкенда для рисования может использоваться OpenGL, поэтому через QPainter скорее всего никак.
Но можно попробовать добраться до backbuffer.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Января 22, 2014, 14:31 »

Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком"
Собственно, а почему он должен быть?

В качестве бэкенда для рисования может использоваться OpenGL, поэтому через QPainter скорее всего никак.
А может и QPrinter. Вот будет интересно спросить у принтера пиксель Улыбающийся
« Последнее редактирование: Января 22, 2014, 14:35 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Января 22, 2014, 16:42 »

А может и QPrinter. Вот будет интересно спросить у принтера пиксель Улыбающийся
А что здесь плохого? В нативняке напр
Цитировать
COLORREF GetPixel(
  _In_  HDC hdc,
  _In_  int nXPos,
  _In_  int nYPos
);
Ну вернет какое-то дефаулт значение если контекст не поддерживает чтение, но операция-то есть

Собственно, а почему он должен быть?
Потому что потребность в нем совершенно естественна. Напр я хочу как-то по-своему подсветить/затемнить участок рисуемого изображения, почему я должен изыскивать подходящий blend или городить свой буфер?   

Ну вот, опять придется нырять в нативняк  Плачущий
Записан
Bepec
Гость
« Ответ #4 : Января 22, 2014, 17:22 »

Чтобы узнать пиксель, нужно обратиться к холсту, а не кисти. Pixmap, нативняк - вот куда  надо смотреть.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Января 22, 2014, 17:52 »

Чтобы узнать пиксель, нужно обратиться к холсту, а не кисти. Pixmap, нативняк - вот куда  надо смотреть.
"Холст/кисть" - такие термины хороши чтобы начинающий побыстрее понял о чем речь. Но в разговоре профессионалов они неуместны  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Января 22, 2014, 18:06 »

Скролла тоже не видно (чтобы не обидеть QPrinter). Или я не прав?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Января 22, 2014, 18:10 »

Скролла тоже не видно (чтобы не обидеть QPrinter). Или я не прав?
Скролла это кто?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Января 22, 2014, 18:34 »

Скролла это кто?
Код:
- На Крупской выходите?
- да не Крупской, а Крупского, там еще и памятник ему стоит
Я хоть и небольшой охотник до UI, но уж базовые-то ф-ции помню. А Вы, батенька, что-то вообще поплыли  Плачущий
Записан
Bepec
Гость
« Ответ #9 : Января 22, 2014, 18:40 »

offtop: Тот является профессионалом, кто может простыми словами сказать о сложном, а не тот, кто говорит сложное о простом.

Скролла и быть не может (если вы о скроллинге). Ведь есть холст и кисть. А холстом является в момент отрисоки только то, что видно.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #10 : Января 22, 2014, 18:46 »

Я хоть и небольшой охотник до UI, но уж базовые-то ф-ции помню.
Или на ходу придумываете? Улыбающийся

Я так понимаю, что дальше вы будете искать drawTeapot, сэкономлю вам время - ее тоже нет.
« Последнее редактирование: Января 22, 2014, 19:09 от Old » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Января 22, 2014, 20:00 »

Скролла и быть не может (если вы о скроллинге). Ведь есть холст и кисть. А холстом является в момент отрисоки только то, что видно.
Поверьте, и то что не видно - тоже. Есть окно, мне известно что обновилось напр 10% пыкселей снизу. Чего же это я не могу сдвинуть вверх 90% и дорисовать только новые 10%? Зачем громко заявлять "быть не может" если вещь банальна/стандартна?  Улыбающийся

Или на ходу придумываете? Улыбающийся
Да неужели? См QWidget::scroll который сводится к scroll_sys что использует нативные вызовы скролла. В общем, понял, спрашиваю у больного здоровье  Плачущий
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #12 : Января 22, 2014, 20:02 »

Как мне в момент рисования прочитать пиксель(и)?
В момент рисования через public API скорее всего никак, а вообще через QWidget::grab.

И, чтобы не плодить однотипные темы, то же со скроллом (опять в момент рисования).
Это также вряд ли можно через public API, а для прокрутки есть QWidget::scroll.

Обе ф-ции всю жизнь были в нативном рисовании. Чем их заменить при переходе на Qt?
В Qt другая идеология же: все через события делать, вот в них и можно вызывать те самые функции, что приведены выше. QPainter API может рисовать через OpenGL, а чтение пикселей обратно из видеопамяти - операция слишком медленная.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Января 22, 2014, 20:14 »

Да неужели? См QWidget::scroll который сводится к scroll_sys что использует нативные вызовы скролла.
А как в вашем воображении соотносятся QWidget и QPainter? Улыбающийся

В общем, понял, спрашиваю у больного здоровье  Плачущий
Чего? Спрашиваете у здоровья? Больного?  Строит глазки
Отойдите на время от компьютера, вы и так с ним не очень ладите, а сейчас он вас явно уделал. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Января 22, 2014, 21:19 »

В Qt другая идеология же: все через события делать, вот в них и можно вызывать те самые функции, что приведены выше. QPainter API может рисовать через OpenGL,
Я понимаю что эти операции не общие, найдется устройство которое их не поддерживает. Но с др стороны - вот QPainter рисует окно Вындоуз, вывод буферирован QImage, Чтение пикселей - на раз, скролл тоже, банальное memmove. Ладно, вот на OSX нативный контекст вместо QImage, но там это еще легче т.к. есть вызовы OC. Понятно разработчику хочется иметь все общее, но все-таки нехорошо так обрезать  Плачущий

..а чтение пикселей обратно из видеопамяти - операция слишком медленная.
Эх, а раньше, не мудрствуя лукаво, 0xB800 или переключил порты, и в 0xA000 Улыбающийся Не думаю что дело в низкой скорости чтения. Я вижу что если OpenGL захватил окно (или его часть) то контекста там не получить - ну как бы он возвращается, но все попытки там читать/писать - эффект нулевой. Почему - хз, возможно это проблемы конкретного ОС или GL фреймворка (очень старого)  
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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