Note that there are some explanatory texts on larger screens.

plurals
  1. POReading and Writing Images to Isolated Storage
    text
    copied!<p>I have come across a couple of different ways to write images to isolated storage on some Windows Phone sites, however I am unsure which is the best to use for a camera app or if there are some that are better than others:</p> <p>The first is from this post on a basic camera application: <a href="http://msdn.microsoft.com/en-us/library/hh202956(v=VS.92).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/hh202956(v=VS.92).aspx</a> It takes the jpeg from the camera and writes it to isolated storage directly.</p> <pre><code> void cam_CaptureImageAvailable(object sender, Microsoft.Devices.ContentReadyEventArgs e) { string fileName = savedCounter + ".jpg"; try { // Write message to the UI thread. Deployment.Current.Dispatcher.BeginInvoke(delegate() { txtDebug.Text = "Captured image available, saving picture."; }); // Save picture to the library camera roll. library.SavePictureToCameraRoll(fileName, e.ImageStream); // Write message to the UI thread. Deployment.Current.Dispatcher.BeginInvoke(delegate() { txtDebug.Text = "Picture has been saved to camera roll."; }); // Set the position of the stream back to start e.ImageStream.Seek(0, SeekOrigin.Begin); // Save picture as JPEG to isolated storage. using (IsolatedStorageFile isStore = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream targetStream = isStore.OpenFile(fileName, FileMode.Create, FileAccess.Write)) { // Initialize the buffer for 4KB disk pages. byte[] readBuffer = new byte[4096]; int bytesRead = -1; // Copy the image to isolated storage. while ((bytesRead = e.ImageStream.Read(readBuffer, 0, readBuffer.Length)) &gt; 0) { targetStream.Write(readBuffer, 0, bytesRead); } } } // Write message to the UI thread. Deployment.Current.Dispatcher.BeginInvoke(delegate() { txtDebug.Text = "Picture has been saved to isolated storage."; }); } finally { // Close image stream e.ImageStream.Close(); } } </code></pre> <p>It seems to use a 4kb Buffer, is there any point in doing it this way? Seems a bit more complicated than this method which converts the image to a bitmap then uses the save as Jpeg method (http://www.windowsphonegeek.com/tips/All-about-WP7-Isolated-Storage---Read-and-Save-Images):</p> <pre><code> // 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(); } </code></pre> <p>If there are any alternative methods you have also I'd be interested, thanks!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload