IP76.RU Графика. Математика. Delphi.
103 subscribers
101 photos
2 files
151 links
Алгоритмы, исходники, теория, GDI, GDI+, D2D
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект лупы

Немного подшаманим в эффекте выше и получим эффект лупы.
Колесом мыши можно менять диаметр лупы.

Исходник (235 Кб) Delphi XE7.
Прога x64 (1.35 Мб)
🔥12👍1
TBitmap.PixelFormat

Небольшая справочная статья по свойству TBitmap.PixelFormat. Задумывается, как ненагруженный вспомогательный материал для других статей.
https://ip76.ru/bitmap-pixelformat/

Пробую некий интерактив, что нужно добавить, что удалить?
👍8
This media is not supported in your browser
VIEW IN TELEGRAM
TBitmap.PixelFormat

Маленькая справочная статья опять выросла в какого-то здорового мутанта.
Подробный разбор каждого формата.
Затронуты вопросы, как работать с палитрой.
Конечно, исходники.

Почитать...
🔥13👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Алгоритм Рамера–Дугласа–Пойкера

Алгоритм Рамера–Дугласа–Пойкера превращает неувернно-дрожащий набор точек в уверенную ломаную, состоящую из бескомпромиссных линий.

Почитать...
🔥13
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект "Прощай лето"
Незапланированный отпуск кончился безвозвратно...

Из интересного внутри:
1) GDIPlus Блюр-эффект
2) Полупрозрачный TGPBitmap

Исходник (62 Кб) Delphi XE7
Прога (908 Кб)
🔥10👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Direct2D. Морфологический эффект

Почитать про эффект на microsoft

Исходник (216 Кб) Delphi XE7
Прога (1.13 Мб)
🔥12
This media is not supported in your browser
VIEW IN TELEGRAM
Direct2D. Эффект Гауссова размывания

Почитать про эффект на microsoft

Исходник (293 Кб) Delphi XE7
Прога (1.19 Мб)
🔥13
This media is not supported in your browser
VIEW IN TELEGRAM
Direct2D. Эффект пастеризации

Суть эффекта - уменьшить количество цветов в изображении.
Чего не написано в доках:
- Опытным путём выяснено, что на каждый канал можно задать число в интервале 2..16. Всё остальное обрубается по этим значениям.
- Если не выставлять значение по какому-либо каналу, то эффект берёт значение, равное 4.

Рядом со спинами - количество уникальных цветов.
С нажатым Ctrl изменения в спинах будут синхронными.
Эффект доступен в Windows 10 и выше.

Исходник (231 Кб) Delphi XE7
Прога (1.12 Мб)
🔥12
This media is not supported in your browser
VIEW IN TELEGRAM
Direct2D. Эффект вращения оттенка

У эффекта один параметр - угол поворота оттенка. Угол соответствует определению тона.

Исходник (242 Кб) Delphi XE7
Прога (1.13 Мб)
🔥12
This media is not supported in your browser
VIEW IN TELEGRAM
Циклическая смена цветового тона в палитре 8-битного изображения

Как обычно, по пятницам, вечерние посиделки не по работе.
Раз уж в предыдущем посте зашёл разговор про тон и палитру 8-битного изображения, то есть три режима:
- Smooth: мягкий, постепенный, приятный
- Harsh: имитация далёкой сварки
- Crazy: имитация сварки на изотопах в горниле реактора

Исходник простой. Обычный битмап, ни D2D, ни GDIP. Можно легко модифицировать под свои нужды.

Исходник (719 Кб) Delphi XE7
Прога (1.37 Мб)
🔥11
g05.gif
10.6 MB
Direct2D. Shadow Face. Effects Mix #1

Микс D2D-эффектов:
1) Гауссово размытие (Windows, IP76)
2) Эффект тени (Windows, IP76)
3) Эффект насыщенности (Windows, IP76)
4) Цветовая матрица (Windows, IP76)

Исходник (1.31 Мб) Delphi XE7
Прога (2.01 Мб)
🔥9
IrfanView

Волею судеб, надо было открыть файл IFF. Недолго погуглив, нашёл бесплатный просмотрщик, установки не требует, функции редактирования имеет, Undo/Redo в наличии, можно сохранить как минимум в JPEG/GIF. Судя по меню, функционал богатый. Решил, что внимания заслуживает.
Чтобы расширить функционал (как минимум, чтобы открыть IFF), качаем плагины (x64) и всё сбрасываем в подкаталог Plugins.
Чтобы сделать русский интерфейс, качаем перевод + русифицированные плагины. Перевод кладём в подкаталог Languages и настраиваем в Options-Change Language... С плагинами поступаем, как описано выше.
Пока выглядит полезным инструментом. Прошу поделиться впечатлениями.

Посмотреть+Скачать
👍5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Длина дуги эллипса через эксцентриситет

Потребовались пояснения к выводу формулы нахождения длины дуги эллипса.
Возможно, хромает изложение, сейчас не сильно хорошо со временем. Поэтому, редакционная критика приветствуется )
Статья не в публичном доступе.
Доступна по ссылке.
🔥6👍1
Delphi: Проблема с breakpoints в Debug 64-bit

Проблема:
Хотим отлаживать в 64-битном дебаге. Замечаем, что не работают breakpoints. Delphi их игнорирует, как-будто мы находимся в релизе. Делает их зелёными и забывает.

Лечение:
Открываем свойства проекта. Идём в Delphi Compiler - Linking. Ставим две галки на Debug information и Include remote debug symbols. Как на рисунке. Компилимся и всё работает.

Подсмотрено:
https://en.delphipraxis.net/topic/10364-breakpoints-do-not-work/
🔥5👍1
Non-user Breakpoint at $00007FFD...

Проблема:
Использую стороннюю dll, написанную на С++. Сегодня получил последнюю версию библиотеки. Запуск проекта вызвал неприличную ругань, выведенную в заголовок. Так бывает, когда неконтролируемо используется DebugBreak API Windows, не анализируя, находится ли модуль в дебаге, или нет.

Лечение:
Tools > Options > Debugger Options > Embarcadero Debuggers
Ставим флаг на Ignore non-user breakpoints, как на рисунке.

Если этот параметр установлен, собственный отладчик игнорирует жестко закодированные точки останова int 3 , а также точки останова, возникающие в результате вызова метода DebugBreak API Windows.

Источник:
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Embarcadero_Debuggers

Похожая проблема:
https://web-answers.ru/c/poprobujte-pojmajte-s-debugbreak.html

Просто ссылки по теме:
https://www.rsdn.org/article/vcpp/vcdebug-2.xml
https://xakep.ru/2013/12/04/61704/
https://ellysh.gitbook.io/video-game-bots-ru/manuscript/ingamebots/protection
🔥6👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Контур образа: Алгоритм поиска

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

Давно хотел написать про алгоритм. А тут ещё и пообещал.
Вот, маленькими перебежками, получилось.

Почитать и оценить )))
🔥7👍5
GDI: Полутоновое масштабирование

Возможно, для более симпатичного масштабирования, чем тот способ, что предлагает нам Canvas, будет достаточно установить полутоновый режим (HALFTONE).
Сделать установку режима растягивания в GDI можно функцией SetStretchBltMode. Рисунок слева - StretchDraw, справа - через полутон.

// StretchDraw в полутоне
procedure HalftoneStretchDraw(
ACanvas: TCanvas;
const ARect: TRect;
ABitmap: TBitmap);
var p: TPoint;
begin
GetBrushOrgEx(
ACanvas.Handle, p);
SetStretchBltMode(
ACanvas.Handle, HALFTONE);
SetBrushOrgEx(ACanvas.Handle,
p.x, p.y, @p);
StretchBlt(ACanvas.Handle,
ARect.Left, ARect.Top,
ARect.Width, ARect.Height,
ABitmap.Canvas.Handle,
0, 0, ABitmap.Width,
ABitmap.Height,
ACanvas.CopyMode);
end;
👍6🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Комплексные числа в Delphi

Для работы с комплексными числами в Delphi есть официальный модуль System.VarCmplx. Но он работает только с вариантным типом. Хотелось бы что-нибудь по-вещественней.

В стандартной поставке Delphi, в примерах, есть проект:
...\Samples\Object Pascal\RTL\ComplexNumbers\Win32OperatorOverload.dproj.
В нём есть модуль Vassbotn.Vcl.Complex.pas. Вот в нём всё сделано на Double.

В дополнение:
Превосходная статья: Комплексные числа и геометрические узоры
Не менее превосходная статья: Как нарисовать звезду (и не только) в полярных координатах

В проге жмём Apply. С параметрами разбираемся по ходу пьесы.
Исходник (76 Кб) Delphi XE7
Прога (967 Кб)
🔥10👍2
Recraft: Искусственный интеллект в помощь дизайнеру

Это сервис. С помощью ИИ генерируем картинки, логотипы, реалистичные фото. И он бесплатный!!! И у людей пальцы на месте )))
Началось всё с того, что мне прислали ссылку на видео. Интерфейс очень даже френдли. Результат мега-качественный. Видео рекомендуемо к просмотру, так как там инструкция по неочевидным функциям.
Я мгновенно зарегился и залип часа на 3. С трудом оторвался, ибо дела. Очень крутая штука.
Олег, спасибо за наводку )))

Попробовать...
🔥4👍1
Динамические массивы

К сожалению, ссылка на статью в этом посте больше недоступна (((
Поэтому, исправляюсь. Статьи на ту же тему от Gun-Smoker:
- Работа с указателями (перевод)
- Параметры типа открытый массив и "array of const"

И пара ссылок по теме:
- Конспект: Динамический массив в Delphi
- Как определить количество ссылок на динамический массив?
🔥7
Спиральное заполнение матрицы

Волею судеб, прилетела задачка:
Дано нечетное число N. Заполнить квадратную матрицу размером N*N следующим образом:

01 - 02 - 03 - 04 - 05
16 - 17 - 18 - 19 - 06
15 - 24 - 25 - 20 - 07
14 - 23 - 22 - 21 - 08
13 - 12 - 11 - 10 - 09

Если расширить на любое количество столбцов и строк, то мне видится вот так (рекурсивно):

type
TIntegerDynMatrix =
array of TIntegerDynArray;

Int = Integer;

TIntHelper = record helper for Int
function NextValue: Integer;
end;

function TIntHelper.NextValue: Integer;
begin
Inc(Self);
Result := Self;
end;

procedure CalcMatrix(
Start, R, C, Row, Col: Integer;
var A: TIntegerDynMatrix);
var i, dc, dr: Integer;
begin
if (C>=Col) or (R>=Row) then exit;
if Row-1>R then dc:=2 else dc:=1;
if Col-1>C then dr:=2 else dr:=1;

for i:=C to Col-dc do
A[R,i]:=Int(Start).NextValue;
if (dr=2) or (dc=2) then
for i:=R to Row-dr do
A[i,Col-1]:=Int(Start).NextValue;
if dc=2 then
for i:=Col-1 downto C+1 do
A[Row-1,i]:=Int(Start).NextValue;
if dr=2 then
for i:=Row-1 downto R+1 do
A[i,C]:=Int(Start).NextValue;

CalcMatrix(Start,
R+1,C+1,Row-1,Col-1,A);
end;
🔥5