Direct2D. Эффект Saturation. Насыщенность
Насыщенность — это второй важный параметр в теории цвета, наравне с яркостью. Определяет степень отличия чистого хроматического цвета от аналогичного ему по яркости ахроматического цвета. Ахроматический цвет — это оттенки серого, который мы получили в предыдущей статье.
https://ip76.ru/direct2d-saturation/
Насыщенность — это второй важный параметр в теории цвета, наравне с яркостью. Определяет степень отличия чистого хроматического цвета от аналогичного ему по яркости ахроматического цвета. Ахроматический цвет — это оттенки серого, который мы получили в предыдущей статье.
https://ip76.ru/direct2d-saturation/
👍1🔥1
Как вставить изображение из буфера обмена
Необходимость вставки изображения из буфера обмена в приложении, связанного с графикой, возникает всегда. По этому поводу небольшой пост и очень простой способ.
Этим постом открываю рубрику "Коротыши". Планирую писать сюда всякие мелкие полезняшки. В меню сайта пока не вывожу, думаю использовать в качестве поясняющего материала к статьям.
Читать полностью...🔗➡️
Необходимость вставки изображения из буфера обмена в приложении, связанного с графикой, возникает всегда. По этому поводу небольшой пост и очень простой способ.
Этим постом открываю рубрику "Коротыши". Планирую писать сюда всякие мелкие полезняшки. В меню сайта пока не вывожу, думаю использовать в качестве поясняющего материала к статьям.
Читать полностью...🔗➡️
🔥1
Как повернуть изображение. GDI, GDI+, Direct2D, JavaScript
Как повернуть изображение? Это один самых популярных запросов к сайту. Согласен, что статья о теории аффинных преобразований больше заточена под объяснение коэффициентов матриц преобразований, почему они такие. Поэтому, исправляю ситуацию и отвечаю на вопрос.
https://ip76.ru/rotate-image-practice/
Как повернуть изображение? Это один самых популярных запросов к сайту. Согласен, что статья о теории аффинных преобразований больше заточена под объяснение коэффициентов матриц преобразований, почему они такие. Поэтому, исправляю ситуацию и отвечаю на вопрос.
https://ip76.ru/rotate-image-practice/
👍1🔥1
Запрет смены фокуса и обработка событий при нажатии стрелок
Бывает так. Пишешь какой-нибудь красочный визуальный CustomControl, и в какой-то момент хочешь добавить реакцию на клавиатурные кнопки влево-вправо-вверх-вниз. Как грамотный человек, переопределяешь методы KeyDown или KeyPress. И тут приходит жесткий облом…
Решить проблему...
Бывает так. Пишешь какой-нибудь красочный визуальный CustomControl, и в какой-то момент хочешь добавить реакцию на клавиатурные кнопки влево-вправо-вверх-вниз. Как грамотный человек, переопределяешь методы KeyDown или KeyPress. И тут приходит жесткий облом…
Решить проблему...
🔥1
Вращение прямоугольника вокруг произвольной точки
Аффинные преобразования становятся мегапопулярными на сайте. Но судя по времени, которое тратится на чтение материала по запросу "прямоугольник с известными размерами вращается не вокруг центра как вычислить координаты вершин", ответ найти не получается.
В связи с чем коротыш, посвященный именно этой теме. Конечно, интерактивный. Конечно, с калькулятором )))
Читать полностью...
Аффинные преобразования становятся мегапопулярными на сайте. Но судя по времени, которое тратится на чтение материала по запросу "прямоугольник с известными размерами вращается не вокруг центра как вычислить координаты вершин", ответ найти не получается.
В связи с чем коротыш, посвященный именно этой теме. Конечно, интерактивный. Конечно, с калькулятором )))
Читать полностью...
🔥1
Как сделать истинное черно-белое изображение
Перефразирую - как быстро сделать black-white binary map.
Думал, что будет про OpenCV, но что-то и так много получилось. Поэтому, в следующий раз.
В основном, про скорость работы с обычным TBitmap.
Видимо, миссия моя такая, убеждать в том, что все уже есть, не надо искать чего-то экстраординарно-быстрого. Надо грамотно пользовать в коробке даденое.
Одним словом, вот ссылка. Буду рад комментариям и критике.
https://ip76.ru/black-white-image/
Перефразирую - как быстро сделать black-white binary map.
Думал, что будет про OpenCV, но что-то и так много получилось. Поэтому, в следующий раз.
В основном, про скорость работы с обычным TBitmap.
Видимо, миссия моя такая, убеждать в том, что все уже есть, не надо искать чего-то экстраординарно-быстрого. Надо грамотно пользовать в коробке даденое.
Одним словом, вот ссылка. Буду рад комментариям и критике.
https://ip76.ru/black-white-image/
👍1
Направить ось Y вверх
По умолчанию, ось Y направлена вниз. Иногда требуется направить ось ординат снизу-вверх. Как правило, перенаправление оси влечет за собой неправильное отображение текста. Нарушается логика определения объектов под курсором. Для исправления ситуации привлекаются аффинные преобразования. Хотя всего этого можно избежать.
Читать как...
По умолчанию, ось Y направлена вниз. Иногда требуется направить ось ординат снизу-вверх. Как правило, перенаправление оси влечет за собой неправильное отображение текста. Нарушается логика определения объектов под курсором. Для исправления ситуации привлекаются аффинные преобразования. Хотя всего этого можно избежать.
Читать как...
👍1
Печать xls(x), doc(x), pdf на указанный принтер
Недавно понадобилось в один свой давнишний проект автоматической печати добавить возможность печати xls(x), doc(x) и pdf. Программа в фоне опрашивает указанные ссылки, и если что-то есть, делает скрины страниц и автоматически выводит на указанный принтер. Теперь люди хотят не только скрины, но и доки, таблицы и прочее.
Понимаю, что не совсем в теме графики, но всякий раз, когда такая необходимость возникает, начинаешь копаться в своих исходниках. Где-то у меня это уже было. Поэтому, зафиксирую тут.
https://ip76.ru/short-stories/print-xlsx-docx-pdf/
Недавно понадобилось в один свой давнишний проект автоматической печати добавить возможность печати xls(x), doc(x) и pdf. Программа в фоне опрашивает указанные ссылки, и если что-то есть, делает скрины страниц и автоматически выводит на указанный принтер. Теперь люди хотят не только скрины, но и доки, таблицы и прочее.
Понимаю, что не совсем в теме графики, но всякий раз, когда такая необходимость возникает, начинаешь копаться в своих исходниках. Где-то у меня это уже было. Поэтому, зафиксирую тут.
https://ip76.ru/short-stories/print-xlsx-docx-pdf/
👍1
Получить PNG из Bitmap c переносом альфа-канала. И наоборот.
Рассмотрено:
- как получить PNG из Bitmap и перенести альфа-канал;
- как перенести альфа-канал из PNG в Bitmap;
- как получить Bitmap из любого TGraphic с анализом альфа-канала.
https://ip76.ru/png-bmp/
Рассмотрено:
- как получить PNG из Bitmap и перенести альфа-канал;
- как перенести альфа-канал из PNG в Bitmap;
- как получить Bitmap из любого TGraphic с анализом альфа-канала.
https://ip76.ru/png-bmp/
🔥1
Принадлежность точки отрезку. Почему не работает классика?
Простой вопрос вызывает кучу запросов и непониманий, почему классическая формула то работает, то не работает. Запросы "принадлежность точки отрезку" уводят на страницу "Пересечение прямых, угол и координаты пересечения", где рассматривается именно пересечение.
Поэтому предпринял попытку раскрыть решение задачи с формулировкой:
Есть отрезок, заданный точками P1(x1,y1) и P2 (x2,y2). Необходимо определить, принадлежит ли точка P(x,y) этому отрезку.
Также рассмотрел ситуации, когда классическая формула дает сбои.
Читать статью...
Простой вопрос вызывает кучу запросов и непониманий, почему классическая формула то работает, то не работает. Запросы "принадлежность точки отрезку" уводят на страницу "Пересечение прямых, угол и координаты пересечения", где рассматривается именно пересечение.
Поэтому предпринял попытку раскрыть решение задачи с формулировкой:
Есть отрезок, заданный точками P1(x1,y1) и P2 (x2,y2). Необходимо определить, принадлежит ли точка P(x,y) этому отрезку.
Также рассмотрел ситуации, когда классическая формула дает сбои.
Читать статью...
🔥1
Как подключить GDI+ для Delphi 7 и не иметь проблем в XE
Собственно, сабж.
Переделаны родные для XE модули GDIPAPI, GDIPOBJ, GDIPUTIL, DirectDraw так, чтобы компилировались в Delphi7. Также переписан GDIPCanvas под Delphi7. Все с примерами.
Исходники компилируются без проблем, и в Delphi7, и в XE7, XE10. Ну, по крайней мере, у меня )))
https://ip76.ru/gdip-for-delphi7/
Собственно, сабж.
Переделаны родные для XE модули GDIPAPI, GDIPOBJ, GDIPUTIL, DirectDraw так, чтобы компилировались в Delphi7. Также переписан GDIPCanvas под Delphi7. Все с примерами.
Исходники компилируются без проблем, и в Delphi7, и в XE7, XE10. Ну, по крайней мере, у меня )))
https://ip76.ru/gdip-for-delphi7/
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Трюки с формой 01: Без заголовка, с тенью и отзывчивой рамкой
Небольшая статья о том, как убрать заголовок окна, как сделать тень такому окну. Как разрешить менять размер мышкой окну без заголовка и фрейма. Надеюсь, первая в цикле подобных статей. Следующую планирую про заголовок с combobox'ом и прочей фигней, реакцию на системные кнопки и системное меню.
Читать
Небольшая статья о том, как убрать заголовок окна, как сделать тень такому окну. Как разрешить менять размер мышкой окну без заголовка и фрейма. Надеюсь, первая в цикле подобных статей. Следующую планирую про заголовок с combobox'ом и прочей фигней, реакцию на системные кнопки и системное меню.
Читать
🔥1
Друзья!
Сделал регистрацию на сайте.
Буду рад видеть в рядах нашего сообщества!
Зарегистрироваться или войти
Сделал регистрацию на сайте.
Буду рад видеть в рядах нашего сообщества!
Зарегистрироваться или войти
This media is not supported in your browser
VIEW IN TELEGRAM
Трюки с формой 2.0: ComboBox в заголовке
В статье рассмотрен трюк с помещением панели в не-клиентскую область окна с последующей отрисовкой и переводом non-client сообщений в обычные виндусовые события.
Модифицирован эффект пламени, вынесен в отдельный модуль.
Показано, как можно рисовать на обычном GDI DC:HDC совместно c GDI+.
Компилируется в Delphi 7, XE 7, XE 10, XE 11.
Протестировано на Win 10, 8, 7, XP.
https://ip76.ru/tricks-form-20/
В статье рассмотрен трюк с помещением панели в не-клиентскую область окна с последующей отрисовкой и переводом non-client сообщений в обычные виндусовые события.
Модифицирован эффект пламени, вынесен в отдельный модуль.
Показано, как можно рисовать на обычном GDI DC:HDC совместно c GDI+.
Компилируется в Delphi 7, XE 7, XE 10, XE 11.
Протестировано на Win 10, 8, 7, XP.
https://ip76.ru/tricks-form-20/
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Вывести текст в перспективе
Как в Delphi 7, XE 7, 10, 11 нарисовать текст с текстурной заливкой в перспективе без аффинных преобразований и 3D наворотов.
Как растянуть текст, чтобы он полностью влез в заданный четырехугольник.
Простые способы работы с TGPBitmap, TGPFont и TGPFontFamily.
https://ip76.ru/gdip-text-warp/
Как в Delphi 7, XE 7, 10, 11 нарисовать текст с текстурной заливкой в перспективе без аффинных преобразований и 3D наворотов.
Как растянуть текст, чтобы он полностью влез в заданный четырехугольник.
Простые способы работы с TGPBitmap, TGPFont и TGPFontFamily.
https://ip76.ru/gdip-text-warp/
🔥2
Координаты точки по углу от произвольной прямой и расстоянию
Небольшой очерк о том, как найти координаты точки, отстоящей на некий угол от произвольной прямой на некое расстояние от точки этой прямой.
Рассмотрен обратный процесс, когда нужно найти угол по трем координатам.
https://ip76.ru/short-stories/angle-len-coord/
Небольшой очерк о том, как найти координаты точки, отстоящей на некий угол от произвольной прямой на некое расстояние от точки этой прямой.
Рассмотрен обратный процесс, когда нужно найти угол по трем координатам.
https://ip76.ru/short-stories/angle-len-coord/
🔥1
Однажды, в 2005 году, один человек грустно сказал мне, что в нашей стране каждый второй считает себя программистом или дизайнером. Сейчас он грустит в Нью-Йорке, а я тут каждый день убеждаюсь в правильности его высказывания.
Вот нет хуже ситуации, когда заказчик владеет какими-то навыками программирования, особенно в такой среде, как Delphi. В Delphi очень просто вообразить себя Шумахером кодинга. Cейчас есть работа, в которой одно из требований использовать TTitleBarPanel. Это очень глючный компонент, и чтобы он заработал как хотелось бы, надо дописать к нему еще кучу апгрейдов, а лучше выкинуть и написать что-то свое. Чрезвычайно простое решение описано тут. Планирую цикл трюков с формой продолжить и написать, как все правильно сделать на основе DWM, который уже затронут в этой статье.
На картинке - мой заголовок, у которого нет никаких проблем. Но это и не компонент.
Может есть у кого опыт удачного использования TTitleBarPanel?
Вот нет хуже ситуации, когда заказчик владеет какими-то навыками программирования, особенно в такой среде, как Delphi. В Delphi очень просто вообразить себя Шумахером кодинга. Cейчас есть работа, в которой одно из требований использовать TTitleBarPanel. Это очень глючный компонент, и чтобы он заработал как хотелось бы, надо дописать к нему еще кучу апгрейдов, а лучше выкинуть и написать что-то свое. Чрезвычайно простое решение описано тут. Планирую цикл трюков с формой продолжить и написать, как все правильно сделать на основе DWM, который уже затронут в этой статье.
На картинке - мой заголовок, у которого нет никаких проблем. Но это и не компонент.
Может есть у кого опыт удачного использования TTitleBarPanel?