도형에 3D 효과와 그림자 적용 방법
Aspose.Slides FOSS는 모든 도형에 두 개의 독립적인 효과 시스템을 제공합니다:
shape.EffectFormat: 2D 시각 효과: 외부 그림자, 글로우, 블러, 부드러운 가장자리shape.ThreeDFormat: 3D 외관: 베벨, 카메라 시점, 라이트 릭, 재질, 깊이
두 시스템을 동일한 형태에 결합할 수 있습니다.
전제 조건
dotnet add package Aspose.Slides.Foss외부 그림자 추가
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var shape = prs.Slides[0].Shapes.AddAutoShape(
ShapeType.Rectangle, 100, 100, 300, 120
);
shape.AddTextFrame("Shadowed Shape");
var ef = shape.EffectFormat;
ef.EnableOuterShadowEffect();
ef.OuterShadowEffect.BlurRadius = 10; // softness in points
ef.OuterShadowEffect.Direction = 315; // 315 degrees = upper-left
ef.OuterShadowEffect.Distance = 8; // offset in points
ef.OuterShadowEffect.ShadowColor.Color = Color.FromArgb(128, 0, 0, 0);
prs.Save("shadow.pptx", SaveFormat.Pptx);공통 Direction 값: 0=오른쪽, 45=오른쪽 아래, 90=아래, 180=왼쪽, 270=위, 315=왼쪽 위.
글로우 효과 추가
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var shape = prs.Slides[0].Shapes.AddAutoShape(
ShapeType.Ellipse, 150, 100, 250, 250
);
var ef = shape.EffectFormat;
ef.EnableGlowEffect();
ef.GlowEffect.Radius = 20;
ef.GlowEffect.Color.Color = Color.Gold;
prs.Save("glow.pptx", SaveFormat.Pptx);가우시안 블러 적용
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var shape = prs.Slides[0].Shapes.AddAutoShape(
ShapeType.Rectangle, 100, 100, 350, 180
);
shape.EffectFormat.SetBlurEffect(radius: 10, grow: true);
prs.Save("blur.pptx", SaveFormat.Pptx);grow: true 은 블러 영역을 도형 경계 밖으로 확장합니다; grow: false 은 블러를 도형 내부로 클립합니다.
3D 베벨 적용
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var shape = prs.Slides[0].Shapes.AddAutoShape(
ShapeType.Rectangle, 150, 150, 280, 120
);
shape.AddTextFrame("3D Button");
var tdf = shape.ThreeDFormat;
tdf.BevelTop.BevelType = BevelPresetType.Circle;
tdf.BevelTop.Width = 12;
tdf.BevelTop.Height = 6;
prs.Save("bevel.pptx", SaveFormat.Pptx);BevelPresetType 값: Circle, RelaxedInset, CoolSlant, Divot, Riblet, HardEdge, Slope, Convex
카메라와 라이트 릭이 포함된 3D 베벨
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var shape = prs.Slides[0].Shapes.AddAutoShape(
ShapeType.Rectangle, 150, 150, 280, 120
);
shape.AddTextFrame("Metal Button");
var tdf = shape.ThreeDFormat;
tdf.BevelTop.BevelType = BevelPresetType.Circle;
tdf.BevelTop.Width = 10;
tdf.BevelTop.Height = 5;
tdf.Camera.CameraType = CameraPresetType.PerspectiveAbove;
tdf.LightRig.LightType = LightRigPresetType.Balanced;
tdf.LightRig.Direction = LightingDirection.Top;
tdf.Material = MaterialPresetType.Metal;
tdf.Depth = 20;
prs.Save("3d-metal.pptx", SaveFormat.Pptx);그림자와 3D 베벨 결합
두 효과 시스템을 동시에 같은 도형에 활성화할 수 있습니다:
using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
using Aspose.Slides.Foss.Export;
using var prs = new Presentation();
var shape = prs.Slides[0].Shapes.AddAutoShape(
ShapeType.RoundCornerRectangle, 150, 150, 320, 130
);
shape.AddTextFrame("Premium Card");
// Solid fill
shape.FillFormat.FillType = FillType.Solid;
shape.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 30, 80, 180);
// 3D bevel
var tdf = shape.ThreeDFormat;
tdf.BevelTop.BevelType = BevelPresetType.Circle;
tdf.BevelTop.Width = 8;
tdf.Camera.CameraType = CameraPresetType.PerspectiveAbove;
tdf.Material = MaterialPresetType.Plastic;
// Drop shadow
var ef = shape.EffectFormat;
ef.EnableOuterShadowEffect();
ef.OuterShadowEffect.BlurRadius = 12;
ef.OuterShadowEffect.Direction = 270;
ef.OuterShadowEffect.Distance = 6;
ef.OuterShadowEffect.ShadowColor.Color = Color.FromArgb(80, 0, 0, 0);
prs.Save("premium-card.pptx", SaveFormat.Pptx);효과 확인 및 제거
using Aspose.Slides.Foss;
using var prs = new Presentation();
var shape = prs.Slides[0].Shapes.AddAutoShape(
ShapeType.Rectangle, 100, 100, 200, 100
);
var ef = shape.EffectFormat;
ef.EnableOuterShadowEffect();
ef.EnableGlowEffect();
Console.WriteLine($"Has effects: {!ef.IsNoEffects}"); // True
ef.DisableOuterShadowEffect();
ef.DisableGlowEffect();
Console.WriteLine($"Has effects: {!ef.IsNoEffects}"); // False