I try to apply several filters to a picture with the Lumia Imaging SDK, but I can only do it with 1 filter. When I made it for Win 8.1, I could use an array of filters, but now it doesn't work. How I can resolve it?
Code for apply filter:
public async Task<bool> ApplyEffectAsync(StorageFile file)
{
WriteableBitmap temp = new WriteableBitmap(1280, 720);
temp = new WriteableBitmap(1280, 720);
FileStream = await File.OpenAsync(FileAccessMode.Read);
temp.SetSource(FileStream);
OriginalPicture = temp;
FileStream.Seek(0);
original.Invalidate();
((IImageConsumer) Effect).Source = new RandomAccessStreamImageSource(FileStream);
M_renderer = new WriteableBitmapRenderer((IImageProvider)Effect, original);
FilteringPicture = await M_renderer.RenderAsync();
filtering.Invalidate();
return true;
}
When i made it for Win 8.1, I can use array with filters, but now its doesnt work. How I can resolve it?
I don't quite understand how you did this in Win 8.1 app, but in UWP apps, if you want to apply multiple Effects on the image, you can set the last rendered source of effect as the new source of another filter. Just for example here:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="500" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image x:Name="originalimg" Grid.Column="0" />
<SwapChainPanel x:Name="SwapChainPanelTarget" Grid.Column="1" />
<Image x:Name="MutipleFilter" Grid.Column="2" />
</Grid>
<Button Content="Click Me" Click="Button_Click" Grid.Row="1" HorizontalAlignment="Center" />
</Grid>
Code behind:
private async void Button_Click(object sender, RoutedEventArgs e)
{
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/test.jpg"));
//show original image in the Image control
IRandomAccessStream inputStream1 = await file.OpenReadAsync();
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(inputStream1);
originalimg.Source = bitmap;
//use the blureffect
IRandomAccessStream inputStream = await file.OpenReadAsync();
BlurEffect blureffect = new BlurEffect();
inputStream.Seek(0);
blureffect.Source = new Lumia.Imaging.RandomAccessStreamImageSource(inputStream);
var render = new SwapChainPanelRenderer(blureffect, SwapChainPanelTarget);
await render.RenderAsync();
//multiple filters
WriteableBitmap temp = new WriteableBitmap(1280, 720);
LomoEffect lemoeffect = new LomoEffect();
lemoeffect.Source = render.Source; //here, use the last rendered source as the new source of another effect
var l_render = new WriteableBitmapRenderer(lemoeffect, temp);
MutipleFilter.Source = await l_render.RenderAsync();
}