高橋忍さんがSilverlightでのイメージ関係のオブジェクトについてまとめてくださっています。
どういう構想でここまでBitmap処理が面倒なことになっているのか判らないんだけど、BitmapImageから読み出したデータをWriteableBitmapを使ってピクセル操作してJpegとして保存するコードを書いてみました。
// ストリームからBitmapデータを作成するためにBitmapImageを利用 BitmapImage bmp = new BitmapImage(); bmp.SetSource(App.GetResourceStream(new Uri("content.jpg", UriKind.Relative)).Stream); // 俺俺クラスでバッファを確保(FrameBufferは標準では存在しません) FrameBuffer buffer = new FrameBuffer(bmp.PixelWidth, bmp.PixelHeight); // ピクセル操作のためにWriteableBitmapを利用。BitmapImageを食わせてインスタンス生成 WriteableBitmap bmp1 = new WriteableBitmap(bmp); bmp1.Pixels.CopyTo(buffer.Buffer, 0); // エフェクト処理を行う buffer.EffectGrayscale(); // エフェクト後のデータをWriteableBitmapに書き戻す buffer.Buffer.CopyTo(bmp1.Pixels, 0); bmp1.Invalidate(); // エフェクト処理後の画像をJpegデータとして保存 using (var store = IsolatedStorageFile.GetUserStoreForApplication()) using (var strm = store.CreateFile("EffectColorGreen.jpg")) { bmp1.SaveJpeg(strm, bmp.PixelWidth, bmp.PixelHeight, 0, 100); }
まぁ、実はさっき書いたコードのメモで、あまり実用性はないかも。