In this article we are going to learn how to display an image using a file stream in Windows Store Apps.
In this example I will display the image in the page using FileOpenPicker from the file stream. I will set the height and width of the image at run time depending on the user input.
Here I will convert the chosen file from the local PictureLibrary folder and open it using the IRandomAccessStream.
Here is the procedure to be followed.
Step 1
Create the UI design for MainPage.XAML.
<common:LayoutAwarePage
x:Class="Images.Scenario2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Images"
xmlns:common="using:SDKTemplate.Common"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="Input" Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions> <StackPanel>
<Grid Margin="0,50,0,0">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource BasicTextStyle}" Grid.Row="0" Grid.Column="0" Text="DecodePixelHeight:" />
<TextBox x:Name="decodePixelHeight" Grid.Row="0" Grid.Column="1" Width="100" Text="100" HorizontalAlignment="Left" />
<TextBlock Style="{StaticResource BasicTextStyle}" Grid.Row="1" Grid.Column="0" Text="DecodePixelWidth:" />
<TextBox x:Name="decodePixelWidth" Grid.Row="1" Grid.Column="1" Width="100" Text="100" HorizontalAlignment="Left" />
<Button x:Name="Button1" Content="Select image..." Margin="0,0,10,0" Grid.Row="2" Grid.Column="0" />
</Grid>
</StackPanel>
</Grid>
<Grid x:Name="Output" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Row="1">
<Image x:Name="Image1" Stretch="None" />
</Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="FullScreenLandscape"/>
<VisualState x:Name="Filled"/>
<VisualState x:Name="FullScreenPortrait"/>
<VisualState x:Name="Snapped">
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</common:LayoutAwarePage>
In the above code I use two textboxes for user input to set the height and width image.
Step 2
Here is the code of the MainPage.XAML.cs file.
The code for picking a file from the PictureLibrary.
FileOpenPicker open = new FileOpenPicker();
open.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
open.ViewMode = PickerViewMode.Thumbnail;
open.FileTypeFilter.Clear();
open.FileTypeFilter.Add(".bmp");
open.FileTypeFilter.Add(".png");
open.FileTypeFilter.Add(".jpeg");
open.FileTypeFilter.Add(".jpg");
StorageFile file = await open.PickSingleFileAsync();
Open the file in IRandomAccessStream and create a Bitmap Image for that image.
IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
BitmapImage bitmapImage = new BitmapImage();
Set the Pixelheight and PixelWidht of the Image.
bitmapImage.DecodePixelHeight = decodePixelHeight.Text;
bitmapImage.DecodePixelWidth = decodePixelWidth.Text;
Set the source of the Bitmap Image as the stream.
await bitmapImage.SetSourceAsync(fileStream);
Image1.Source = bitmapImage;
Here is the full code.
async void Button1_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker open = new FileOpenPicker();
open.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
open.ViewMode = PickerViewMode.Thumbnail;
// Filter to include a sample subset of file types
open.FileTypeFilter.Clear();
open.FileTypeFilter.Add(".bmp");
open.FileTypeFilter.Add(".png");
open.FileTypeFilter.Add(".jpeg");
open.FileTypeFilter.Add(".jpg");
StorageFile file = await open.PickSingleFileAsync();
if (file != null)
{
using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.DecodePixelHeight = decodePixelHeight.Text;
bitmapImage.DecodePixelWidth = decodePixelWidth.Text;
await bitmapImage.SetSourceAsync(fileStream);
Image1.Source = bitmapImage;
}
}
}
Step 3
Now, run the application.
Set the height and width of the image and pick the file from the local system PictureLibrary.
![File-open-picker-in-windows-store-apps.jpg]()
You will see that the image will be loaded with the specified height and width.
Output
![Image-Control-In-Windows-Store-apps.jpg]()