All about WP7 Isolated Storage - Read and Save Images
published on: 4/5/2011 | Views: N/A | Tags: IsoStore Images
by WindowsPhoneGeek
This is the 7th article from the "All about WP7 Isolated Storage " series of short articles focused on real practical examples with source code rather than a plain theory. I am going to talk about how to read and save Images into Isolated Storage.
- All about WP7 Isolated Storage - intro to Isolated Storage
- All about WP7 Isolated Storage - Folders and Files
- All about WP7 Isolated Storage - Store data in IsolatedStorageSettings
- All about WP7 Isolated Storage - Read and Save Text files
- All about WP7 Isolated Storage - Read and Save XML files using XmlSerializer
- All about WP7 Isolated Storage - Read and Save XML files using XmlWriter
- All about WP7 Isolated Storage - Read and Save Images
- All about WP7 Isolated Storage - Read and Save Captured Image
- All about WP7 Isolated Storage - Read and Save Binary files
- All about WP7 Isolated Storage - File manipulations
- All about WP7 Isolated Storage - Recommendations and Best Practices
- All about WP7 Isolated Storage - open source Databases and Helper libraries
To begin with lets first create a sample Windows Phone 7 application project and add an image called "logo.jpg" with build action "Content".
NOTE: For more info about build actions take a look at this post: WP7 working with Images: Content vs Resource build action
Next include the following namespaces in MainPage.xaml.cs (alternatively you can use the code in another page):
using System.IO.IsolatedStorage; using System.Windows.Media.Imaging; using System.IO; using System.Windows.Resources; using Microsoft.Xna.Framework.Media; using Microsoft.Phone.Tasks;
NOTE: Microsoft.Xna.Framework.Media; is needed only if you want to Read/Save images to the MediaLibrary!
Reading and saving Images to the Isolated Storage is a common task for many WP7 applications. In windows phone 7 you can also Read/Save images to the MediaLibrary.
Basically we use IsolatedStorageFileStream class to to read, write and create files in isolated storage. The main difference when talking about Images is the usage of BitmapImage and WriteableBitmap classes.
NOTE: When working with files always use Using statement because it provides a convenient syntax that ensures the correct use of IDisposable objects.
Save Image to Isolated Storage
In this example at first we will check if the file already exists and after that we will save the Image to the IsolatedStorage (encoding WriteableBitmap object to a JPEG stream).
Basically at first we create virtual store and file stream, check for duplicate tempJPEG files and IsolatedStorageFileStream. After that we create a stream out of the sample JPEG file and WriteableBitmap.Next we encode WriteableBitmap object to a JPEG stream.
// Create a filename for JPEG file in isolated storage.
String tempJPEG = "logo.jpg";
// Create virtual store and file stream. Check for duplicate tempJPEG files.
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (myIsolatedStorage.FileExists(tempJPEG))
{
myIsolatedStorage.DeleteFile(tempJPEG);
}
IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(tempJPEG);
StreamResourceInfo sri = null;
Uri uri = new Uri(tempJPEG, UriKind.Relative);
sri = Application.GetResourceStream(uri);
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(sri.Stream);
WriteableBitmap wb = new WriteableBitmap(bitmap);
// Encode WriteableBitmap object to a JPEG stream.
Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
//wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
fileStream.Close();
}
NOTE: Alternatively you could use WriteableBitmap to save an Image: wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
Read Image from Isolated Storage
In this example at first open an existing logo.jpg Image file from the Isolated Storage and read its content. After that the content is visualized in an Image control.
BitmapImage bi = new BitmapImage();
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("logo.jpg", FileMode.Open, FileAccess.Read))
{
bi.SetSource(fileStream);
this.img.Height = bi.PixelHeight;
this.img.Width = bi.PixelWidth;
}
}
this.img.Source = bi;
NOTE: When open an existing file from the Isolated Storage we use FileMode.Open, when we want to read to a file we use FileAccess.Read! You can find a list of all FileAccess possibilities here.
NOTE: "img" is an ImageControl placed inside MainPage.xaml: <Image x:Name="img"/>
Saving an image to the phone's Media Library
Note that you have to add reference to Microsoft.XNA.Framework in order to be able to use the MediaLibrary.
In this example we will create a new stream from isolated storage (we will read an image from the Isolated Storage), and save the JPEG file to the Media Library on Windows Phone.
In order to view the result we will use PhotoChooserTask.
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("logo.jpg", FileMode.Open, FileAccess.Read))
{
MediaLibrary mediaLibrary = new MediaLibrary();
Picture pic = mediaLibrary.SavePicture("SavedLogo.jpg", fileStream);
fileStream.Close();
}
}
PhotoChooserTask photoChooserTask = new PhotoChooserTask();
photoChooserTask.Show();
And finally the result is as follows:
In this article I talked about reading and saving Images into Isolated Storage. Here is the full source code:
Stay tuned with the rest of the posts. I hope that the article was helpful.
You can also follow us on Twitter @winphonegeek
Comments
same images are repeated
posted by: jagadish on 4/14/2011 10:48:08 AM
Hi, The code is well but the images are getting repeated could you suggest changes in your code to not to repeat the images regards jagadish
RE:same images are repeated
posted by: winphonegeek on 4/26/2011 10:28:34 PM
Can you please explain in more details what do you mean by "repeated" images? How do you think the example should be extended?
posted by: Andre on 6/12/2011 10:09:12 PM
Hi, thanks for this post!.
I see that when reading from the isolated storage you set the filestream directly on the source of the bitmapimage. The first time when writing to th isolated storage however, you use the stream from the streamresourceinfo. I noticed an error when I tried to use the filestream directly :-) but why is that?
--Andre
posted by: Bill on 6/17/2011 4:15:04 PM
Only question I have is if this will work for other formats aside from JPEG, but since I'll probably try it before you write back, I'll reply when I figure it out, haha.
LINQ string to image path
posted by: Alan on 7/22/2011 1:40:13 AM
In my MainPage I am displaying a list of People (photo, name) I am using LINQ objects to persist this data, my linq object contains a personImage [column] that is of type string so I can store the path to the image. If there isn't one then I default to a .png I have in the "Images" folder of the solution.
My question is, how do I take my path value stored in linq and retrieve the actual image from IsolatedStorage and return that instead of just a path?
image1.source to stream
posted by: Viel on 9/2/2011 5:16:19 PM
bitmap.SetSource(sri.Stream);
is possible to replace sri.stream with image1.source? i want to save to iso storage the image1.source...
what if i need to import an image from the media library?
posted by: Paulo Flores on 10/8/2011 10:36:41 PM
I want to use import a photo from the media library and then save it to an isolated storage and then read that photo from the isolated storage.
RE: what if i need to import an image from the media library
posted by: winphonegeek on 10/9/2011 4:50:02 PM
The easiest way to get a picture from the phone's media library is to use the PhotoChooserTask. For more details take a look at the following article: http://www.windowsphonegeek.com/articles/2-how-to-choose-photo-or-take-a-new-one-in-windows-phone-7
many images
posted by: maroo on 12/16/2011 3:23:29 AM
how can i do it for many images ??
folder of images
posted by: tounsi on 12/16/2011 3:27:43 AM
how can i do it for many images ??i want to read a gallery of picture how can i do it ?
Getting Error on execution
posted by: Suhas Kulkarni on 2/18/2012 2:53:03 PM
Hi, When I run this code and clicked on Save to Media library button, I got a following error :
Operation not permitted on IsolatedStorageFileStream.
Will you please help me to resolve the issue.
save image to database
posted by: randy lim on 4/21/2012 12:30:48 PM
Hi. I wanna ask when I take a picture, how do I save it in a local database? Thanks
Our Top Articles & Free books
- Our FREE e-book: "Windows Phone Toolkit In Depth" 2nd edition
- 400+ Windows Phone Development articles in our Article Index
- 21 WP7 Toolkit in Depth articles covering all controls
- 12 WP7 Coding4Fun Toolkit in Depth articles covering all controls
- Performance Tips when creating WP7 apps
- Creating a WP7 Custom Control in 7 Steps
- WP7 working with VisualStates: How to make a ToggleSwitch from CheckBox
- What makes a WP7 App successful
- Creating theme friendly UI in WP7 using OpacityMask
- Implementing Windows Phone 7 DataTemplateSelector and CustomDataTemplateSelector
- All about Splash Screens in WP7 – Creating animated Splash Screen
- Getting Started with Unit Testing in Silverlight for WP7
- WP7 WatermarkedTextBox custom control
Our Top Tips & Samples
- All about WP7 Isolated Storage series
- WP7 Dynamically Generating DataTemplate in code
- 5 tips for a successful WP7 Marketplace submission
- WP7: Navigating to a page in different assembly
- WP7 ContextMenu: answers to popular questions
- WP7 ListBox: answers to popular questions
- WP7 working with Images: Content vs Resource build action
- WP7 Element Binding samples
- WP7 working with XML: reading, filtering and databinding
- Drawing in WP7: #2 Drawing shapes with finger
- WP7 TextBox Light theme problems - the solution
- Changing the WP7 Panorama Background Image dynamically with Animation
