1# graphics_effect 2 3## 介绍 4Graphics Effect是OpenHarmony图形子系统的重要部件,为图形子系统提供必需的动视效算法能力,包括模糊、阴影、渐变、灰阶、提亮、反色、取色等。 5 6## 软件架构 7 8 9Graphics Effect的分层说明如下: 10 11• 接口层:Graphics Effect通过ArkUI、UIEffect、EffectKit对外开放能力。 12 13• 实现层:分为GERender、GEVisualEffect、GEVisualEffectContainer三个模块。 14| 模块 | 能力描述 | 15|-------------------------------|---------------------------------------| 16| GERender(渲染) | 提供绘制能力,将GEVisualEffect效果绘制到canvas画布上。 | 17| GEVisualEffect(动视效) | 具体动视效能力的实现。 | 18| GEVisualEffectContainer(动视效容器) | 多个动视效方便集成。 | 19 20## 目录结构 21``` 22foundation/graphic/graphics_effect/ 23├── figures # Markdown引用的图片目录 24├── include # Graphics Effect接口存放目录 25│ ├── ext # 动态加载框架及算法接口存放目录 26├── src # 源代码存放目录 27│ ├── ext # 动态加载框架及算法接口实现存放目录 28└── test # 测试用例存放目录 29 ├── fuzztest # fuzz用例存放目录 30 └── unittest # 单元测试用例存放目录 31``` 32 33## 安装教程 34 35不涉及 36 37## 使用说明 38 39在桌面、状态栏、控制中心等系统UI场景中已经集成了该部件的能力,用户可直接操作使用并体验相应效果。 40 41### 1.将指定动视效绘制到画布上 42 43以Image为基础,应用GEVisualEffectContainer所包含的动视效,并直接绘制到传入的canvas画布上 44``` 45void DrawImageEffect(Drawing::Canvas& canvas, Drawing::GEVisualEffectContainer& veContainer, 46 const std::shared_ptr<Drawing::Image>& image, const Drawing::Rect& src, const Drawing::Rect& dst, 47 const Drawing::SamplingOptions& sampling); 48``` 49调用示例: 50``` 51 Drawing::Canvas canvas; 52 auto image = std::make_shared<Drawing::Image>(); 53 auto visualEffectContainer = std::make_shared<Drawing::GEVisualEffectContainer>(); 54 DrawImageRectAttributes attr; 55 56 auto geRender = std::make_shared<GraphicsEffectEngine::GERender>(); 57 geRender->DrawImageEffect(canvas, *visualEffectContainer, image, attr.src, attr.src, Drawing::SamplingOptions()); 58``` 59 60### 2.将指定动视效绘制到画布上并以图片形式返回绘制结果 61 62以Image为基础,应用GEVisualEffectContainer所包含的动视效,并返回新的Image 63``` 64std::shared_ptr<Drawing::Image> ApplyImageEffect(Drawing::Canvas& canvas, 65 Drawing::GEVisualEffectContainer& veContainer, const std::shared_ptr<Drawing::Image>& image, 66 const Drawing::Rect& src, const Drawing::Rect& dst, const Drawing::SamplingOptions& sampling); 67``` 68调用示例: 69``` 70 Drawing::Canvas canvas; 71 auto image = std::make_shared<Drawing::Image>(); 72 auto visualEffectContainer = std::make_shared<Drawing::GEVisualEffectContainer>(); 73 DrawImageRectAttributes attr; 74 75 auto geRender = std::make_shared<GraphicsEffectEngine::GERender>(); 76 auto outImage = geRender->ApplyImageEffect(canvas, *visualEffectContainer, image, attr.src, attr.src, Drawing::SamplingOptions()); 77``` 78 79