私のアプリはカメラを使用して画像を取得し、それを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);
}
私は、ソースストリームに書き込みをしようとしていました。ドー!
ありがとうございました。
PhotoResult eはストリームではないため、SaveJpegはそれをターゲットにして動作しません。どこに画像を保存しますか?隔離されたストレージまたは一時的なストリームまたは他の場所... – ameer
新しいMemoryStream()に保存するときは、今すぐ保存した場所を参照する必要はありません。メモリストリームを前もって作成し、メモリストリーム一度圧縮するとメモリストリームから直接アップロードするか、独立したストレージに保存して後でアップロードします。 – ameer