【发布时间】:2012-03-26 17:18:57
【问题描述】:
我在自定义 FrameworkElement 的 OnRender 方法中绘制图像。我也想画出这张图片的阴影。我需要在代码中执行此操作,并且我不想使用 DropShadowBitmapEffect,因为它已过时。我怎样才能做到这一点?
public class MyDrawingView : FrameworkElement
{
protected override void OnRender(System.Windows.Media.DrawingContext dc)
{
drawImagesOnDrawingContext(dc);
}
public RenderTargetBitmap getBitmap()
{
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dcMine = dv.RenderOpen())
{
drawImagesOnDrawingContext(dcMine);
dcMine.Close();
}
RenderTargetBitmap rtb = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Pbgra32);
rtb.Render(dv);
return rtb;
}
private void drawImagesOnDrawingContext(System.Windows.Media.DrawingContext dc)
{
//how to draw shadow on bi?
BitmapImage bi = new BitmapImage(new Uri(@"D:\mytemp\img1.jpg"));
dc.DrawImage(bi, new Rect(50, 50, 100, 100));
//how to draw shadow on bi1
BitmapImage bi1 = new BitmapImage(new Uri(@"D:\mytemp\img2.jpg"));
dc.DrawImage(bi1, new Rect(30, 30, 100, 100));
}
}
请注意,下面 SvenG 建议的解决方案为基础元素添加效果对我不起作用,因为它为整个元素而不是我绘制的单个图像提供阴影。例如,如果我有两个重叠的 DrawImage,建议的解决方案将考虑整体绘制阴影。上图的阴影不会在下图上绘制。
另外,我想使用如上所示的getBitmap函数创建一个位图,以导出带有阴影的绘制图像。
【问题讨论】:
-
位图是透明的吗?即,您要对位图的单个像素进行阴影处理,还是对每个位图只添加一个矩形阴影?
-
@GazTheDestroyer 位图可以是透明的,因此每个位图的矩形阴影将不起作用。但是,现在我也不知道怎么画一个矩形阴影!