2012-02-16 7 views
5

私のアプリはカメラを使用して画像を取得し、それをflickrにアップロードします。私は、アップロードが現在と同じくらい時間がかからないように、イメージを圧縮したいと思います。 BitmapSourceとWriteableBitmapの 'SaveJpeg'メソッドの両方を試してみましたが、失敗しました。ビットマップソースには、.NET Frameworkの完全版と同じメンバと、WriteableBitmapが保存しているSaveJpegメソッドがあります。このストリームは「このストリームは書き込みできません」というエラーが表示されます。Windows Phoneで画像を圧縮するには

これは私が現在、私のCameraCaptureTask完了イベントハンドラでやっているものです:

private void CameraCaptureCompleted(object sender, PhotoResult e) 
    { 
     if (e == null || e.TaskResult != TaskResult.OK) 
     { 
      return; 
     }                
     BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};       
     bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto)); 
     WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap); 

     // Encode the WriteableBitmap object to a JPEG stream. 
     writeableBitmap.SaveJpeg(e.ChosenPhoto, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85); 
    } 

このコードは私に与える:エラー「ストリームが書き込みをサポートしていません」。

イメージを圧縮する方法が他にありますか、圧縮アルゴリズムを作成する必要がありますか?

UPDATE FIXED!

private void CameraCaptureCompleted(object sender, PhotoResult e) 
    { 
     if (e == null || e.TaskResult != TaskResult.OK) 
     { 
      return; 
     }                
     BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};       
     bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto)); 
     WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap); 

     // Encode the WriteableBitmap object to a JPEG stream. 
     writeableBitmap.SaveJpeg(new MemoryStream(), writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85); 
    } 

私は、ソースストリームに書き込みをしようとしていました。ドー!

ありがとうございました。

+0

PhotoResult eはストリームではないため、SaveJpegはそれをターゲットにして動作しません。どこに画像を保存しますか?隔離されたストレージまたは一時的なストリームまたは他の場所... – ameer

+1

新しいMemoryStream()に保存するときは、今すぐ保存した場所を参照する必要はありません。メモリストリームを前もって作成し、メモリストリーム一度圧縮するとメモリストリームから直接アップロードするか、独立したストレージに保存して後でアップロードします。 – ameer

答えて

3

SaveJpegは私がこれを行う方法です。あなたはおそらく他のやり方をすることができますが、私はそれが最も簡単で最も自然かもしれないと思います。 SaveJpegに渡すストリームは書き込み可能ではないため、 'このストリームは書き込みをサポートしていません'というエラーが発生している可能性があります。私は、あなたが、に書き込むだけで、昔ながらのメモリストリームを使用してみてください、それはあなたが最後のパラメータで画質を調整することができ、そのような

using System.IO; 

// ... 

MemoryStream ms = new MemoryStream(); 
pic.SaveJpeg(ms, pic.PixelWidth, pic.PixelHeight, 0, 0, 50); 

のように動作するかどうかを確認しようとしているかを正確にはわかりません。 PixelWidth/HeightはWriteableBitmapです。他のソースがある場合は、別の方法/プロパティを使用して幅/高さを取得する必要があります。カメラからの画像がかなり大きくなる可能性があるので、これらのスケールを調整することができます。これらの画像をアップロードしているものによって異なりますが、ファイルサイズを小さくすることもできます。

+0

あなたの返信ameerありがとう。上記のコードスニペットを使用して投稿を更新しました。それは私が現在直面しているものです。 – Cranialsurge