Я хотел бы использовать элемент FrameworkElement (например, панель) в качестве изображения (для использования SDK Nokia Image). Я хотел бы применить эффект не к изображению, а к элементу 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);
и ImageCartoon в XAML:
<Image x:Name="ImageCartoon" Width="456" Height="240" Grid.Row="1" ></Image>
я получаю исключение: "Значение не попадает в ожидаемый диапазон" в строке
_cartoonImageBitmap = await renderer.RenderAsync();
У вас есть идеи, почему?
Есть ли лучший способ получить поток из элемента FrameworkElement?
(Я знаю, что могу сохранить writeableBitmap в filestorage перед его чтением, но я бы хотел избежать сохранения изображения для повышения производительности).
Большое спасибо за помощь.
Я рад, что вы нашли решение! –