|
0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 6
|
||||||
Замена цвета пикселей на черно-белый в выбранном окне11.12.2014, 22:16. Показов 5182. Ответов 8
Метки нет (Все метки)
Нужно расположить все открытые окна на экране (сделал). Затем выбрать одно из окон, определить его границы и в пределах этих границ сменить цвет на черно-белый. Как сменить цвет пикселей в загруженной картинке я разобрался, а вот со сменой цвета пикселей выбранного окна возникла проблема.
Если я правильно понял, то таким образом можно получить дискриптор окна: HDC hdc = GetDC(Form1->Handle), однако как внедрить это в имеющуюся программу я все равно не понимаю. Код имеющейся программы:
Окна.zip
0
|
||||||
| 11.12.2014, 22:16 | |
|
Ответы с готовыми решениями:
8
Черно-белый ковер. Черно белый график Из цветного pdf в черно-белый |
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
||||||||||||||||
| 12.12.2014, 04:59 | ||||||||||||||||
Сообщение было отмечено SatanaXIII как решение
Решение
После выполнения TileWindows регистрируешь (например) клавишу Escape (для "отлова" нажатий клавиш мыши вне формы нужно, насколько я понял, писать хук):
Для определения нажатия клавиши добавь на форму программы компонент ApplicationEvents. В его событии OnMessage (ApplicationEventsMessage) пропиши:
Если что-то в окне поменялось, то "завеса" спадает. В этом случае можешь (если будет результат) постоянно перекрашивать окно.
2
|
||||||||||||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||||||
| 12.12.2014, 12:37 | ||||||
|
Ни на что не претендую, но вот тут кое чего чуть-чуть поломал:
Добавлено через 1 час 2 минуты 3 секунды Мысль еще - ускориться за счет считывания не попиксельно, а линиями: Bitmap->ScanLine. Но тут опасно. Формат пикселей надо учитывать.
2
|
||||||
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
|||||||
| 12.12.2014, 14:21 | |||||||
|
Вчера я затупил, и "выдать" строчки 57-58 вместо SetPixel мозг уже не смог.
Про ScanLine я также упомянул, но хз как с ним работать. Насчет опасности - осторожно, наверно, можно. Опыта нет, пример в билдере бегло просмотрел.
Добавлено через 21 минуту P.S.: и дело даже не в том, что SetPixel в цикле. Сам SetPixel "тормозной" до невозможности. А BitBlt работает реально быстрее.
1
|
|||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||||||||||||||||||
| 12.12.2014, 14:42 | |||||||||||||||||||
|
Вот тут ребята кстати как-то тем же самым баловались: Как попиксельно сравнить 2 изображения
А вот с записью сложнее. Можно конечно тем же макаром попробовать, только в обратную сторону: получить указатель на линию и писать порциями по TRGBTriple байт. Но как-то все это вилами по воде. Зато скорость будет закачаешься. VCL просто работает с GDI, и предоставляет хоть и надежные методы, и кучу их всяческих, но все же чудеса с ней трудно вытворять. Вот тут Авазарт как-то баловался с GDI+, которая уже вполне вероятно такое потянет. Мораль: надо короче либо на уровень ниже переходить, либо выше. Добавлено через 2 минуты Добавлено через 25 секунд Все сошлось. ![]() Добавлено через 10 минут Информация в тему. Именно быстрый доступ к пикселям в GDI и в MFC
При написании фильтров для изображения требуется способ доступа к отдельным пикселям. Самый простой способ - сделать это с помощью функций GetPixel/SetPixel в WinAPI и MFC и с помощью двумерного массива TCanvas->Pixels в VCL. Однако так поступать не стоит, поскольку такой способ является чрезвычайно медленным.
Быстрый способ доступа к пикселям в GDI и MFC: При работе с функциями GDI напрямую, наиболее удобным представляется создание объекта bitmap, к пикселям которого можно обращаться напрямую. Делается это с помощью функции CreateDIBSection. Одним из выходных параметров этой функции является указатель на переменную, куда при создании bitmap будет помещен указатель на массив пикселей - ppvBits. Запомнив этот указатель, приложение получает прямой доступ к пикселям изображения. Обычно использующиеся true color изображения с глубиной цвета 24 bit хранят данные попиксельно в виде массива троек `BGR' (каждый пиксель - три байта). Адрес пикселя с координатами (x, y) для изображений такого типа рассчитывается следующим образом:
Здесь iBytesPerLine - это длина строки изображения в байтах, которая отнюдь не всегда равна ширине изображения, умноженной на три. Для увеличения производительности работы с изображением адреса начал строк выравниваются по границе процессорного слова (4 байта), поэтому если ширина, умноженная на 3, не кратна четырем, каждая из строк дополняется несколькими дополнительными байтами . Рассчитать длину строки в байтах можно по следующей формуле:
Именно таким образом быстрый доступ к пикселям изображения реализован в классе DSimpleBitmap в примере MFC_GML3. Быстрый способ доступа к пикселям в VCL: Для того чтобы получить прямой доступ к указателю на пикселы изображения, хранящегося в TBitmap, нужно использовать свойство ScanLine. Это массив указателей на строки пикселей изображения. Доступ к пикселю с координатами (x, y) осуществляется следующим образом:
Буду очень сильно благодарен, если кто удосужится провести серию опытов с обоими предложенными методами, и соответственно поделится кодом (чтобы каждый мог у себя проверить) и сравнительными результатами.
1
|
|||||||||||||||||||
| 12.12.2014, 15:27 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 6
|
||
| 12.12.2014, 16:52 [ТС] | ||
0
|
||
| 13.12.2014, 06:00 | |
|
Может проще сделать снимок окна, перевести его в Ч/Б и наложить его сверху. Либо создать Layered окно, и наложить его (может быть сделать дочерним) сверху.
0
|
|
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,008
|
|
| 13.12.2014, 11:49 | |
|
0
|
|
| 13.12.2014, 11:49 | |
|
Помогаю со студенческими работами здесь
9
Черно-белый сайт по кнопке! Цветной BMP в черно-белый Японский кроссворд(черно-белый) Чёрно-белый скрин экрана Преобразовать рисунок в черно-белый по алгоритму Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|