• Delphi XE2 之 FireMonkey 入门(15) 滤镜: 获取滤镜信息



    滤镜类的继承关系:
    TObject -> TPersistent -> TFilter -> TShaderFilter -> { 具体的滤镜类 }
    
    //下面例子首先会用到 FMX.Filter 单元的四个公用方法:
    procedure FillCategory(AList: TStrings);
    procedure FillFiltersInCategory(const Category: string; AList: TStrings);
    function FilterByName(const AName: string): TFilter;
    function FilterClassByName(const AName: string): TFilterClass;
    


    通过 FillCategory()方法可以获取滤镜的分类列表:
    FillCategory(ListBox1.Items);
    


    通过 FillFiltersInCategory()方法可以获取某个类别的滤镜列表:
    FillFiltersInCategory('分类名称', ListBox2.Items);
    


    通过 FilterByName()方法可以获取滤镜对象:
    var
      filter: TFilter;
    begin
      filter := FilterByName('滤镜名称'); //这很方便, 省得手动建立了
    end;
    


    通过 TFilter 的 FilterAttr()方法可以获取滤镜的信息:
    var
      filter: TFilter;
      filterRec: TFilterRec; //滤镜信息被包装在 TFilterRec 类型的结构体中
    begin
      filter := FilterByName('滤镜名称');
      filterRec := filter.FilterAttr;
      {因为 FilterAttr 是 class 方法, 所以也可以如下获取}
      filterRec := FilterClassByName('滤镜名称').FilterAttr;
    end;
    


    TFilterRec 结构:
    TFilterRec = record
      Name: string;                 //滤镜名称
      Desc: string;                 //滤镜描述
      Values: TShaderValueRecArray; //滤镜的参数数组, TShaderValueRec 类型
    end;
    


    TShaderValueRec 结构:
    TShaderValueRec = record
      Name: string;                //参数名称
      Desc: string;                //参数描述
      ValueType: TShaderValueType; //参数类型: vtFloat, vtPoint, vtColor, vtBitmap(数值、点、颜色值、图像)
      Value: Variant;              //参数值
      Min, Max, Default: Variant;  //参数的最小、最大及默认值
    end;
    


    测试: 需要两个 TListBox、一个 TMemo, 还有 OnCreate 事件和 TListBox 的 OnClick 事件.

    uses System.TypInfo; //用于获取枚举名称
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FillCategory(ListBox1.Items); //获取分类名称列表
    end;
    
    procedure TForm1.ListBox1Click(Sender: TObject);
    var
      strItem1: string;
    begin
      strItem1 := ListBox1.Items[ListBox1.ItemIndex];
      FillFiltersInCategory(strItem1, ListBox2.Items); //获取指定类别的滤镜列表
    
      ListBox2.ItemIndex := 0;
      ListBox2.OnClick(nil);
    end;
    
    procedure TForm1.ListBox2Click(Sender: TObject);
    var
      strItem2: string;
      filter: TFilter;
      filterRec: TFilterRec;
      shaderValueRec: TShaderValueRec;
    begin
      strItem2 := ListBox2.Items[ListBox2.ItemIndex];
      filter := FilterByName(strItem2); //通过滤镜名称获取滤镜对象
      filterRec := filter.FilterAttr;   //获取滤镜对象的信息
    //  filterRec := FilterClassByName(strItem).FilterAttr; //同上一行
    
      Memo1.Text :=   '滤镜类名: ' + filter.ToString; //ClassName
      Memo1.Lines.Add('滤镜名称: ' + filterRec.Name);
      Memo1.Lines.Add('滤镜描述: ' + filterRec.Desc);
      Memo1.Lines.Add('------------------------------------------------');
    
      for shaderValueRec in filterRec.Values do
      begin
        Memo1.Lines.Add('参数名称: ' + shaderValueRec.Name);
        Memo1.Lines.Add('参数描述: ' + shaderValueRec.Desc);
        Memo1.Lines.Add('参数类型: ' + GetEnumName(TypeInfo(TShaderValueType), Integer(shaderValueRec.ValueType)));
        if shaderValueRec.ValueType <> TShaderValueType.vtBitmap then
        begin
          Memo1.Lines.Add('当前值: ' + string(shaderValueRec.Value));
          Memo1.Lines.Add('最小值: ' + string(shaderValueRec.Min));
          Memo1.Lines.Add('默认值: ' + string(shaderValueRec.Default));
          Memo1.Lines.Add('最大值: ' + string(shaderValueRec.Max));
        end;
        Memo1.Lines.Add(EmptyStr);
      end;
    end;
    

  • 相关阅读:
    java经典面试题
    用OpenSSL把二进制的Cer证书转换程Base64格式的PEM格式的证书
    JVM中java实例对象在内存中的布局
    高级加密标准(英语:Advanced Encryption Standard,缩写:AES)
    中断和中断处理程序
    CS 寄存器 和 IP 寄存器
    Gson通过借助TypeToken获取泛型参数的类型的方法
    Tomcat 的 JDBC 连接池
    Google Guava官方教程(中文版)
    阿里DRUID数据源
  • 原文地址:https://www.cnblogs.com/del/p/2193256.html
Copyright © 2020-2023  润新知