Перейти к содержанию
Fire Monkey от А до Я
  • 0

Программное одноразовое применение InnerGlowEffect к изображению


Tumaso

Вопрос

Подскажите пожалуйста, как можно однократно применить эффект TInnerGlowEffect к TImage? Вариант с созданием экземпляра TInnerGlowEffect и его присоединение к TImage не подходит. Другими словами, нужно на TImage отрисовать этот эффект, и далее используется эта сформированная картинка с данным эффектом.

Я смотрел пример ShaderFilters, идущий в комплекте с делфи, и накидал следующий код:

var LFilter: TFilter;

LFilter := TFilterManager.FilterByName('InnerGlowFilter');
LFilter.ValuesAsBitmap['Input'] := LSource.Bitmap;  // исходная картинка  
LFilter.ValuesAsColor['Color'] := PremultiplyAlpha(MakeColor(TAlphaColorRec.Red, 0.6));
LFilter.ValuesAsFloat['BlurAmount'] := 2;
LDest.Bitmap := LFilter.ValuesAsBitmap['output'];  // результат

в итоге получаю только картинку, состоящую из одного черного фона. Что я делаю не так?
 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Способ понятен, но задача стоит применить эффект произвольному изображению в памяти. ValuesAsBitmap['Input'] и ValuesAsBitmap['output'] для, например, эффекта отражения работает без проблем. Поэтому есть необходимость аналогичного эффекта для InnerGlow.

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

Ссылка на комментарий
  • 0

Поздно, но может кому пригодится

function TForm1.Blur(sbit: TBitmap): TBitmap;
var
  FilterClass: TFilterClass;
  FFilter: TFilter;
  FFilterParams: TFilterRec;
  BitmSource, BitmDest: TBitmap;
begin
      BitmSource:=TBitmap.Create;
      BitmSource.Assign(sbit);
      Result:=TBitmap.Create;
      FFilter := TFilterManager.FilterByName('GaussianBlur');
      FilterClass := TFilterManager.FilterClassByName('GaussianBlur');
      FFilterParams := FilterClass.FilterAttr;
      FFilter.ValuesAsFloat['BlurAmount']:=5.7;
      FFilter.Apply;
      FFilter.ValuesAsBitmap['Input'] := BitmSource;
      Result.Assign(FFilter.ValuesAsBitmap['output']);
      FreeAndNil(FFilter);
      FreeAndNil(BitmSource);
end;

function TForm1.Tint(sbit: TBitmap; tintColor: TAlphaColor): TBitmap;
var
  FilterClass: TFilterClass;
  FFilter: TFilter;
  FFilterParams: TFilterRec;
  BitmSource, BitmDest: TBitmap;
begin
      BitmSource:=TBitmap.Create;
      BitmSource.Assign(sbit);
      Result:=TBitmap.Create;
      FFilter := TFilterManager.FilterByName('FillRGB');
      FilterClass := TFilterManager.FilterClassByName('FillRGB');
      FFilterParams := FilterClass.FilterAttr;
      FFilter.ValuesAsColor['Color']:=tintColor;
      FFilter.Apply;
      FFilter.ValuesAsBitmap['Input'] := BitmSource;


      Result.Assign(FFilter.ValuesAsBitmap['output']);
      FreeAndNil(FFilter);
      FreeAndNil(BitmSource);
end;

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...