Direct2D. Перспективная трансформация
Перспективная проекция Direct2D отличается от перспективной трансформации «по четырем точкам» тем, что она строится по углам поворота вокруг осей X, Y, Z, учитывает смещения и точку вращения.
https://ip76.ru/d2d-persp/
Перспективная проекция Direct2D отличается от перспективной трансформации «по четырем точкам» тем, что она строится по углам поворота вокруг осей X, Y, Z, учитывает смещения и точку вращения.
https://ip76.ru/d2d-persp/
🔥1
ScrollBox с прокруткой, масштабом и перетаскиванием
ScrollBox представляет собой контейнер для визуальных компонентов. Может иметь полосы прокрутки, с помощью которых можно добраться до любого элемента контейнера. Прокрутка осуществляется только с помощью ScrollBar’ов. На колесо мыши не реагирует. Перетаскивать содержимое мышью не умеет. Популярностью не пользуется.
https://ip76.ru/scrollbox-wheel/
ScrollBox представляет собой контейнер для визуальных компонентов. Может иметь полосы прокрутки, с помощью которых можно добраться до любого элемента контейнера. Прокрутка осуществляется только с помощью ScrollBar’ов. На колесо мыши не реагирует. Перетаскивать содержимое мышью не умеет. Популярностью не пользуется.
https://ip76.ru/scrollbox-wheel/
👍1
TStyleHook, GDI+ и шрифт из ресурса
Наследники TStyleHook служат для перехвата событий и пользовательской отрисовки компонента. Что позволяет кардинально улучшить интерфейс без написания своих компонент и хакерских уловок. Планировал к стилям зайти издалека, но уж так как-то само собой сложилось, что буду описывать сейчас.
https://ip76.ru/tstylehook-gdip/
Наследники TStyleHook служат для перехвата событий и пользовательской отрисовки компонента. Что позволяет кардинально улучшить интерфейс без написания своих компонент и хакерских уловок. Планировал к стилям зайти издалека, но уж так как-то само собой сложилось, что буду описывать сейчас.
https://ip76.ru/tstylehook-gdip/
🔥1
SpinEdit. Самозванец с плавающей запятой
SpinEdit с плавающей запятой нужен, порой, как воздух. Но стандартный SpinEdit оперирует только целочисленными значениями. Поэтому для вещественных значений, либо пишется имитатор в связке Edit + UpDown, либо используется JvSpinEdit, либо cxSpinEdit, либо аналогичное. Хотя, стандартный SpinEdit отлично подходит для этих целей.
https://ip76.ru/spinedit-imposter/
SpinEdit с плавающей запятой нужен, порой, как воздух. Но стандартный SpinEdit оперирует только целочисленными значениями. Поэтому для вещественных значений, либо пишется имитатор в связке Edit + UpDown, либо используется JvSpinEdit, либо cxSpinEdit, либо аналогичное. Хотя, стандартный SpinEdit отлично подходит для этих целей.
https://ip76.ru/spinedit-imposter/
🔥1
Direct2D. Эффект Brightness. Яркость
Если под яркостью понимать «осветление» или «затемнение», то в Direct2D этого можно добиться, как минимум, тремя эффектами: Brightness, Exposure, HighlightsShadows. Есть еще универсальный эффект цветовой матрицы. Но эффект Brightness своим существованием напрямую отвечает за яркость, поэтому на нем и сосредоточимся.
https://ip76.ru/direct2d-brightness/
Если под яркостью понимать «осветление» или «затемнение», то в Direct2D этого можно добиться, как минимум, тремя эффектами: Brightness, Exposure, HighlightsShadows. Есть еще универсальный эффект цветовой матрицы. Но эффект Brightness своим существованием напрямую отвечает за яркость, поэтому на нем и сосредоточимся.
https://ip76.ru/direct2d-brightness/
🔥1
Direct2D. Contrast & Sharpen. Контраст и резкость
Контраст и резкость в Direct2D представлены эффектами Contrast и Sharpen соответственно. Как обычно, Microsoft опять накосячил с математикой в документации. Эта неприятность будет исправлена ниже.
https://ip76.ru/d2d-contrast-sharpen/
Контраст и резкость в Direct2D представлены эффектами Contrast и Sharpen соответственно. Как обычно, Microsoft опять накосячил с математикой в документации. Эта неприятность будет исправлена ниже.
https://ip76.ru/d2d-contrast-sharpen/
🔥1
Direct2D. ColorMatrix. Цветовая матрица
ColorMatrix — это мощный инструмент для работы с растровым изображением. С помощью матрицы можно удалять, комбинировать, менять местами цветовые каналы изображения. Можно вращать цветовой вектор. Многие эффекты являются просто частным случаем цветовой матрицы. Одним словом, ColorMatrix — это сила.
https://ip76.ru/direct2d-colormatrix/
ColorMatrix — это мощный инструмент для работы с растровым изображением. С помощью матрицы можно удалять, комбинировать, менять местами цветовые каналы изображения. Можно вращать цветовой вектор. Многие эффекты являются просто частным случаем цветовой матрицы. Одним словом, ColorMatrix — это сила.
https://ip76.ru/direct2d-colormatrix/
🔥1
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