IP76.RU Графика. Математика. Delphi.
103 subscribers
101 photos
2 files
151 links
Алгоритмы, исходники, теория, GDI, GDI+, D2D
Download Telegram
ScrollBox с прокруткой, масштабом и перетаскиванием

ScrollBox представляет собой контейнер для визуальных компонентов. Может иметь полосы прокрутки, с помощью которых можно добраться до любого элемента контейнера. Прокрутка осуществляется только с помощью ScrollBar’ов. На колесо мыши не реагирует. Перетаскивать содержимое мышью не умеет. Популярностью не пользуется.

https://ip76.ru/scrollbox-wheel/
👍1
TStyleHook, GDI+ и шрифт из ресурса

Наследники TStyleHook служат для перехвата событий и пользовательской отрисовки компонента. Что позволяет кардинально улучшить интерфейс без написания своих компонент и хакерских уловок. Планировал к стилям зайти издалека, но уж так как-то само собой сложилось, что буду описывать сейчас.

https://ip76.ru/tstylehook-gdip/
🔥1
SpinEdit. Самозванец с плавающей запятой

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/
🔥1
Direct2D. Contrast & Sharpen. Контраст и резкость

Контраст и резкость в Direct2D представлены эффектами Contrast и Sharpen соответственно. Как обычно, Microsoft опять накосячил с математикой в документации. Эта неприятность будет исправлена ниже.

https://ip76.ru/d2d-contrast-sharpen/
🔥1
Direct2D. ColorMatrix. Цветовая матрица

ColorMatrix — это мощный инструмент для работы с растровым изображением. С помощью матрицы можно удалять, комбинировать, менять местами цветовые каналы изображения. Можно вращать цветовой вектор. Многие эффекты являются просто частным случаем цветовой матрицы. Одним словом, ColorMatrix — это сила.

https://ip76.ru/direct2d-colormatrix/
🔥1
Direct2D. Эффект Saturation. Насыщенность

Насыщенность — это второй важный параметр в теории цвета, наравне с яркостью. Определяет степень отличия чистого хроматического цвета от аналогичного ему по яркости ахроматического цвета. Ахроматический цвет — это оттенки серого, который мы получили в предыдущей статье.

https://ip76.ru/direct2d-saturation/
👍1🔥1
Обновился VTV, обновился исходник https://ip76.ru/vtv-footers/#Versia_1
🔥1
Как вставить изображение из буфера обмена

Необходимость вставки изображения из буфера обмена в приложении, связанного с графикой, возникает всегда. По этому поводу небольшой пост и очень простой способ.

Этим постом открываю рубрику "Коротыши". Планирую писать сюда всякие мелкие полезняшки. В меню сайта пока не вывожу, думаю использовать в качестве поясняющего материала к статьям.

Читать полностью...🔗➡️
🔥1
Как повернуть изображение. GDI, GDI+, Direct2D, JavaScript

Как повернуть изображение? Это один самых популярных запросов к сайту. Согласен, что статья о теории аффинных преобразований больше заточена под объяснение коэффициентов матриц преобразований, почему они такие. Поэтому, исправляю ситуацию и отвечаю на вопрос.

https://ip76.ru/rotate-image-practice/
👍1🔥1
Запрет смены фокуса и обработка событий при нажатии стрелок

Бывает так. Пишешь какой-нибудь красочный визуальный CustomControl, и в какой-то момент хочешь добавить реакцию на клавиатурные кнопки влево-вправо-вверх-вниз. Как грамотный человек, переопределяешь методы KeyDown или KeyPress. И тут приходит жесткий облом…
Решить проблему...
🔥1
Вращение прямоугольника вокруг произвольной точки

Аффинные преобразования становятся мегапопулярными на сайте. Но судя по времени, которое тратится на чтение материала по запросу "прямоугольник с известными размерами вращается не вокруг центра как вычислить координаты вершин", ответ найти не получается.

В связи с чем коротыш, посвященный именно этой теме. Конечно, интерактивный. Конечно, с калькулятором )))

Читать полностью...
🔥1
Как сделать истинное черно-белое изображение

Перефразирую - как быстро сделать black-white binary map.
Думал, что будет про OpenCV, но что-то и так много получилось. Поэтому, в следующий раз.
В основном, про скорость работы с обычным TBitmap.
Видимо, миссия моя такая, убеждать в том, что все уже есть, не надо искать чего-то экстраординарно-быстрого. Надо грамотно пользовать в коробке даденое.

Одним словом, вот ссылка. Буду рад комментариям и критике.

https://ip76.ru/black-white-image/
👍1
С НОВЫМ ГОДОМ!
Интересных проектов, сбычи мечт и здоровья!
УРА!
Направить ось Y вверх

По умолчанию, ось Y направлена вниз. Иногда требуется направить ось ординат снизу-вверх. Как правило, перенаправление оси влечет за собой неправильное отображение текста. Нарушается логика определения объектов под курсором. Для исправления ситуации привлекаются аффинные преобразования. Хотя всего этого можно избежать.

Читать как...
👍1
Печать xls(x), doc(x), 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/
🔥1
Принадлежность точки отрезку. Почему не работает классика?

Простой вопрос вызывает кучу запросов и непониманий, почему классическая формула то работает, то не работает. Запросы "принадлежность точки отрезку" уводят на страницу "Пересечение прямых, угол и координаты пересечения", где рассматривается именно пересечение.
Поэтому предпринял попытку раскрыть решение задачи с формулировкой:
Есть отрезок, заданный точками 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/
🔥1