IP76.RU Графика. Математика. Delphi.
103 subscribers
101 photos
2 files
151 links
Алгоритмы, исходники, теория, GDI, GDI+, D2D
Download Telegram
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
This media is not supported in your browser
VIEW IN TELEGRAM
Визуализация спирального заполнения матрицы

Конечно, руки чесались сделать визуализатор для поста выше.
Всё по честному, отрисовка вызывается при вставке каждого нового значения в матрицу. То есть можно глазами увидеть весь процесс изнутри. Алгоритм тот же, но без хелпера.

Исходник (61 Кб) Delphi XE7
Прога (1.09 Мб) Прога под 64 бита. В 32-х Касперский снова начал параноить.
🔥7