我想使用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保存到文件存儲中,但我想避免保存圖像以提高性能)。
非常感謝您的幫助。
我很高興你找到了解決方案! –