我想使用FrameworkElement(例如Panel)作为Image(使用Nokia Image SDK)。 我想申请一个效果不是在图像上,而是在FrameworkElement上。将FrameworkElement转换为Stream而不保存到文件
我一直在努力尝试使用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);
和ImageCartoon在XAML:
<Image x:Name="ImageCartoon" Width="456" Height="240" Grid.Row="1" ></Image>
我得到异常:在line
“值没有在预期范围内” _cartoonImageBitmap = await renderer.RenderAsync();
你知道为什么吗?
有没有更好的方法从FrameworkElement中获取流?
(我知道我可以在读取之前将writeableBitmap保存到文件存储中,但我想避免保存图像以提高性能)。
非常感谢您的帮助。
我很高兴你找到了解决方案! –