{$I ABL.PEFlagsForDLL.inc}, {$I AIMP.Plugins.inc}
Вопрос по ACL: после компиляции компоненты должны появиться в палитре?
Всё равно ошибка та же: пытается создать директорию на несуществующем диске B:\.
... П.С. согласен, надо добавить пример в SDKАртём, если возьмёшься за это дело, то лучше пример плагина с использованием AIMPVisualData, к нему интерес и вопросов заметно больше, судя по темам в этом разделе.
Вот три демки (пока только по Embedded).Собрал aimp_visDemo.dll, но ни 5.30, ни 5.40 её не видят.
Собрал aimp_visDemo.dll, но ни 5.30, ни 5.40 её не видят.
В 5.00, 5.11 работает как в окне, так и в полноэкранном режиме.
Нужной разрядности?Запутался я в этой разрядности. Почему-то в этих примерах не создаются отдельные папки Win32 и Win64, видно, что-то перемудрил с конфигурацией проекта, dll-ки компилировались в один каталог. Вчера уже по внутренностям их определил, кто есть кто: х32 или х64. Всё работает.
с какой периодичностью вызывается метод Draw
Артём, подскажи в какую сторону копать: мне нужно получить наложение цветов в режиме ADD из нескольких PNG.
На картинке это сделано с помощью StretchBlt, но она прозрачность не поддерживает.
В твоей ACL.Graphics.Ex вроде, нашёл то что нужно, но, боюсь, без примера мне не разобраться. Так понял, что графика должна загружаться в TACLDib?
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72498)
LImage := TACLImage.Create('test.png');
try
LBitmap := LImage.ToBitmap;
try
LDib := TACLBitmapLayer;
LDib.Assign(LBitmap);
finally
LBitmap.Free;
end;
finally
LImage.Free;
end;
Не получается установить ACLPackage для режима х64
Если без установки в uses прописать нужные модули из runtime, то на каждый (и на все, что те ссылаются) выдаёт:
[dcc64 Fatal Error] ACL.Graphics.pas(16): F1026 File not found: 'ACL.Config.inc'
Нужно пути прописать к файлам (ну или кинуть все в папку с проектом)Пути прописаны ко всем библиотекам.
ACL.Config.inc
так он лежит не в Base, а на уровне выше, рядом с пакетом.Вот в этом вся загвоздка и была! Общую папку я и не прописал. Спасибо!
procedure TForm1.DrawBtnClick(Sender: TObject);
var
LImage : TACLImage;
LBitmap : TACLBitmap;
LDib : TACLBitmapLayer;
begin
// LImage := TACLImage.Create(HInstance, 'Red', PChar('RCDATA'));
LImage := TACLImage.Create('d:\Delphi_Projects\ACL_exp\Red.png');
try
LBitmap := LImage.ToBitmap;
try
LDib := TACLBitmapLayer.Create;
LDib.Assign(LBitmap);
finally
LBitmap.Free;
end;
finally
LImage.Free;
end;
PaintBox.Canvas.Brush.Color := clBlack;
PaintBox.Canvas.FillRect(PaintBox.ClientRect);
LDib.DrawBlend(PaintBox.Canvas, Point(100,100), bmAddition, 255);
LDib.Free
end;
LDib := TACLBitmapLayer.Create;
LImage := TACLImage.Create('B:\Red.png');
try
LImage.SaveToDib(LDib);
finally
LImage.Free;
end;
PaintBox1.Canvas.Brush.Color := clBlack;
PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);
LDib.DrawBlend(PaintBox1.Canvas, Point(100,100), bmAddition, 255);
LDib.Free
В общем... я сделал иначе, и оно даже стало чуть проще.Угу, заработало, сейчас рисуется нормально.
ImgR := TPNGImage.Create;
ImgR.LoadFromResourceName(HInstance, 'Red');
Но этот TPNGImage, похоже, к ACL никак ни приткнуть.ACLDib.Resize использовать не получается
ACLDib.Resize использовать не получается и DrawBlend принимает только TPoint
procedure TForm1.DrawBtnClick(Sender: TObject);
var
LImage : TACLImage;
DstDib, LDib : TACLBitmapLayer;
begin
LImage := TACLImage.Create(HInstance, 'Red', RT_RCDATA);
LDib := TACLBitmapLayer.Create;
DstDib := TACLBitmapLayer.Create(PaintBox.ClientRect);
try
LImage.SaveToDib(LDib);
finally
LImage.Free;
end;
PaintBox.Canvas.Brush.Color := clBlack;
PaintBox.Canvas.FillRect(PaintBox.ClientRect);
LDib.DrawBlend(DstDib.Canvas, Rect(50,50,300,300), 255, true);
DstDib.DrawBlend(PaintBox.Canvas, Point(0,0), bmAddition, 255);
LDib.Free;
DstDib.Free
end;
Но как это будет шевелиться в плагине в Draw, ещё и ресайз слоёв делать надо при изменении размера окна.
Не получается в плагине подключить модули ACL.Graphics.Ex, ACL.Graphics.Images (на форме работает).
При попытке компиляции открываются эти файлы и стопорится на одном и том же месте:
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72535)
[dcc64 Fatal Error] ACL.Graphics.Ex.pas(37): F2613 Unit 'Graphics' not found.
В свойствах проекта в разделе компилятора надо дописать в Unit scope names Vcl;Vcl.Imaging;Vcl.Touch;Спасибо, Артём! Не подскажешь, где можно почитать про все эти настройки проекта, желательно на русском, чтоб тебя не дёргать каждый раз?
Не подскажешь, где можно почитать про все эти настройки проекта, желательно на русском, чтоб тебя не дёргать каждый раз?
Всё-таки, на ACL плагин заметно тяжелее получился
Если рисовать без блюра, то по нагрузке почти одинаково
Blur как делаешь? средствами ACL?Ну, да, в той процедуре DrawBlend(ACanvas: TCanvas; const R: TRect; AAlpha: Byte; ASmoothStretch: Boolean) последний параметр, как я понял, и задаёт блюр.
последний параметр, как я понял, и задаёт блюр
Смотрю твои ddl-ки, они в сотни кБ укладываются, а у меня вариант на ACL аж 4 мега весит (release).
Это растяжение картинки со сглаживанием.Кстати, при выводе со сглаживанием, параметр AAlpha в той процедуре игнорируется?
Кстати, при выводе со сглаживанием, параметр AAlpha в той процедуре игнорируется?
или эффект какой-то слабый.
PaintBox.Canvas.Brush.Color := clBlack;
PaintBox.Canvas.FillRect(PaintBox.ClientRect);
После такого у Canvas-а не будет альфа-канала. А мой DrawBlend его учитывает при работе.Вон, оно в чём дело. Спасибо.
всё правильно заработало, но на 2624.
Запускаю плагин на другом компе (там 2628) - прозрачности нет. Обновление до 2629 ничего не изменило.
Ничего лучшего пока не придумал, как объявить глабальные переменные в модуле формы, а из модуля визуализации их считывать.
Вроде, работает, но насколько это криминально?
И как и куда можно сохранять настройки плагина?
Ничего криминального в этом нет.Но, как-то, вроде, криво кажется...
Как работать с конфигом плеера есть вот в этом плагине:Спасибо, Артём! Буду разбираться.
Но, как-то, вроде, криво кажется...
Ещё и с локализацией непонятки остались
Можно ли в одном плагине визуализации создать два независимых окна со своим контекстом?
Лаконичный ответ. ;)
То есть, если я правильно понял, можно создать два класса, к примеру, TVisualization1 и TVisualization2 ?
Core.RegisterExtension(IAIMPServiceVisualizations, TVisualization.Create);
и в нём перекрыть только метод Draw ?
Мне не совсем понятно, как несколько визуализаций будут делить DC, передаваемый плеером.
А рисует на DC только один плагин - тот, который выберет пользователь.Так мне нужно, чтоб оба окна были на экране одновременно.
Так мне нужно, чтоб оба окна были на экране одновременно.
На IAIMPExtensionCustomVisualization, к сожалению, примеров нет.
можно пошаговую инструкцию для чайников?прям для чайников нету как пойдёте зависит от языка на котором писать будете обычно берут Visual Studio с GDI+ (для C++) так же можете на Delphi с ACL
мне надо вот это видео превратить в визуализацию.
https://skr.sh/vZ8AgFX4eqJ
мне надо вот это видео превратить в визуализацию.Это какой-то реальный плагин или просто анимрованная картинка?
Это какой-то реальный плагин или просто анимрованная картинка?просто анимация. точнее это скринсейвер.
На видео связи с музыкой никакой не просматривается: ни по частоте, ни по уровню.