Название: QPainter::getPixel()? QPainter::scroll()? Отправлено: Igors от Января 22, 2014, 13:31 Добрый день
Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком". И, чтобы не плодить однотипные темы, то же со скроллом (опять в момент рисования). Обе ф-ции всю жизнь были в нативном рисовании. Чем их заменить при переходе на Qt? Спасибо Название: Re: QPainter::getPixel() ? Отправлено: Old от Января 22, 2014, 14:19 Добрый день В качестве бэкенда для рисования может использоваться OpenGL, поэтому через QPainter скорее всего никак.Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком" Спасибо Но можно попробовать добраться до backbuffer. Название: Re: QPainter::getPixel() ? Отправлено: GreatSnake от Января 22, 2014, 14:31 Как мне в момент рисования прочитать пиксель(и)? Не наблюдаю такого метода у QPainter. Please "ткните носиком" Собственно, а почему он должен быть?В качестве бэкенда для рисования может использоваться OpenGL, поэтому через QPainter скорее всего никак. А может и QPrinter. Вот будет интересно спросить у принтера пиксель :)Название: Re: QPainter::getPixel() ? Отправлено: Igors от Января 22, 2014, 16:42 А может и QPrinter. Вот будет интересно спросить у принтера пиксель :) А что здесь плохого? В нативняке напрЦитировать COLORREF GetPixel( Ну вернет какое-то дефаулт значение если контекст не поддерживает чтение, но операция-то есть_In_ HDC hdc, _In_ int nXPos, _In_ int nYPos ); Собственно, а почему он должен быть? Потому что потребность в нем совершенно естественна. Напр я хочу как-то по-своему подсветить/затемнить участок рисуемого изображения, почему я должен изыскивать подходящий blend или городить свой буфер? Ну вот, опять придется нырять в нативняк :'( Название: Re: QPainter::getPixel() ? Отправлено: Bepec от Января 22, 2014, 17:22 Чтобы узнать пиксель, нужно обратиться к холсту, а не кисти. Pixmap, нативняк - вот куда надо смотреть.
Название: Re: QPainter::getPixel() ? Отправлено: Igors от Января 22, 2014, 17:52 Чтобы узнать пиксель, нужно обратиться к холсту, а не кисти. Pixmap, нативняк - вот куда надо смотреть. "Холст/кисть" - такие термины хороши чтобы начинающий побыстрее понял о чем речь. Но в разговоре профессионалов они неуместны :)Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Igors от Января 22, 2014, 18:06 Скролла тоже не видно (чтобы не обидеть QPrinter). Или я не прав?
Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Old от Января 22, 2014, 18:10 Скролла тоже не видно (чтобы не обидеть QPrinter). Или я не прав? Скролла это кто?Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Igors от Января 22, 2014, 18:34 Скролла это кто? Код: - На Крупской выходите? Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Bepec от Января 22, 2014, 18:40 offtop: Тот является профессионалом, кто может простыми словами сказать о сложном, а не тот, кто говорит сложное о простом.
Скролла и быть не может (если вы о скроллинге). Ведь есть холст и кисть. А холстом является в момент отрисоки только то, что видно. Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Old от Января 22, 2014, 18:46 Я хоть и небольшой охотник до UI, но уж базовые-то ф-ции помню. Или на ходу придумываете? :)Я так понимаю, что дальше вы будете искать drawTeapot, сэкономлю вам время - ее тоже нет. Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Igors от Января 22, 2014, 20:00 Скролла и быть не может (если вы о скроллинге). Ведь есть холст и кисть. А холстом является в момент отрисоки только то, что видно. Поверьте, и то что не видно - тоже. Есть окно, мне известно что обновилось напр 10% пыкселей снизу. Чего же это я не могу сдвинуть вверх 90% и дорисовать только новые 10%? Зачем громко заявлять "быть не может" если вещь банальна/стандартна? :) Или на ходу придумываете? :) Да неужели? См QWidget::scroll который сводится к scroll_sys что использует нативные вызовы скролла. В общем, понял, спрашиваю у больного здоровье :'(Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: kamre от Января 22, 2014, 20:02 Как мне в момент рисования прочитать пиксель(и)? В момент рисования через public API скорее всего никак, а вообще через QWidget::grab (http://qt-project.org/doc/qt-5/qwidget.html#grab).И, чтобы не плодить однотипные темы, то же со скроллом (опять в момент рисования). Это также вряд ли можно через public API, а для прокрутки есть QWidget::scroll (http://qt-project.org/doc/qt-5/qwidget.html#scroll).Обе ф-ции всю жизнь были в нативном рисовании. Чем их заменить при переходе на Qt? В Qt другая идеология же: все через события делать, вот в них и можно вызывать те самые функции, что приведены выше. QPainter API может рисовать через OpenGL, а чтение пикселей обратно из видеопамяти - операция слишком медленная.Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Old от Января 22, 2014, 20:14 Да неужели? См QWidget::scroll который сводится к scroll_sys что использует нативные вызовы скролла. А как в вашем воображении соотносятся QWidget и QPainter? :)В общем, понял, спрашиваю у больного здоровье :'( Чего? Спрашиваете у здоровья? Больного? ::)Отойдите на время от компьютера, вы и так с ним не очень ладите, а сейчас он вас явно уделал. :) Название: Re: QPainter::getPixel()? QPainter::scroll()? Отправлено: Igors от Января 22, 2014, 21:19 В Qt другая идеология же: все через события делать, вот в них и можно вызывать те самые функции, что приведены выше. QPainter API может рисовать через OpenGL, Я понимаю что эти операции не общие, найдется устройство которое их не поддерживает. Но с др стороны - вот QPainter рисует окно Вындоуз, вывод буферирован QImage, Чтение пикселей - на раз, скролл тоже, банальное memmove. Ладно, вот на OSX нативный контекст вместо QImage, но там это еще легче т.к. есть вызовы OC. Понятно разработчику хочется иметь все общее, но все-таки нехорошо так обрезать :'(..а чтение пикселей обратно из видеопамяти - операция слишком медленная. Эх, а раньше, не мудрствуя лукаво, 0xB800 или переключил порты, и в 0xA000 :) Не думаю что дело в низкой скорости чтения. Я вижу что если OpenGL захватил окно (или его часть) то контекста там не получить - ну как бы он возвращается, но все попытки там читать/писать - эффект нулевой. Почему - хз, возможно это проблемы конкретного ОС или GL фреймворка (очень старого) |