title: Reading and Writing Images to Isolated Storage
body: <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>