我想使用一个框架元素(如面板)作为图像(使用诺基亚图像 SDK)。我想不是在图像上而是在 FrameworkElement 上应用效果。
我一直在努力尝试将 FrameworkElement 用作 writeableBitmap,然后将其用作我的 FilterEffect 的流。
这是我所做的:
private async void testCartoon_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
//the panel I want as an Image
var rootElement = ContentPanel as FrameworkElement;
WriteableBitmap myWB = new WriteableBitmap(rootElement,null);
byte[] bytes = myWB.ToByteArray();
MemoryStream stream = new MemoryStream();
await stream.WriteAsync(myWB.ToByteArray(),0,bytes.Count());
stream.Seek(0, SeekOrigin.Begin);
var backgroundSource = new StreamImageSource(stream);
var filterEffect = new FilterEffect(backgroundSource);
CartoonFilter cartoonFilter = new CartoonFilter();
filterEffect.Filters = new[] { cartoonFilter };
var renderer = new WriteableBitmapRenderer(filterEffect, _cartoonImageBitmap);
_cartoonImageBitmap = await renderer.RenderAsync();
ImageCartoon.Source = _cartoonImageBitmap;
}
CartoonFilter 是 NokiaImagingSDK 过滤器之一。
我像这样定义了我的 _cartoonImageBitmap:
_cartoonImageBitmap = new WriteableBitmap((int)ImageCartoon.Width, (int)ImageCartoon.Height);
和 xaml 中的 ImageCartoon :
<Image x:Name="ImageCartoon" Width="456" Height="240" Grid.Row="1" ></Image>
我得到了例外:“值不在预期范围内”在行
_cartoonImageBitmap = await renderer.RenderAsync();
你知道为什么吗?
有没有更好的方法从 FrameworkElement 中获取流?
(我知道我可以在读取之前将 writeableBitmap 保存到文件存储中,但我想避免保存图像以提高性能)。
非常感谢你的帮助。