トップ回答者
WPFで画像を縮小して保存する方法

質問
-
いつもお世話になります。
VisualC#2010、WindowsXPでの動作について質問があります。
WPFで画像を縮小して保存する方法で困っています。
BitmapImage theImage;
theImage.UriSource = new Uri(fileName);
Image afterImage = new Image();
afterImage.Source = theImage;
afterImage.Width = theImage.Width/2;
afterImage.Hight = theImage.Height/2;
これで、afterImageに1/2縮小の画像は入ると思うのですが、
これをbmpやjpgとして保存するには、このあとどのように処理したらよいでしょうか?
回答
-
以下のスレッドに似たような話題がありますね。
WPF での画像の拡大
http://bbs.wankuma.com/index.cgi?mode=al2&namber=51404&KLOG=86Resizing images in WPF
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/45d9de29-d8fb-4a82-bd3e-14f1109e1f00Image クラスからの保存はできないかもしれません。
System.Windows.Media.Imaging 名前空間のクラスを使っていくことになるかと思われます。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
すべての返信
-
以下のスレッドに似たような話題がありますね。
WPF での画像の拡大
http://bbs.wankuma.com/index.cgi?mode=al2&namber=51404&KLOG=86Resizing images in WPF
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/45d9de29-d8fb-4a82-bd3e-14f1109e1f00Image クラスからの保存はできないかもしれません。
System.Windows.Media.Imaging 名前空間のクラスを使っていくことになるかと思われます。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
System.Drawing にせよ System.Windows.Media.Imaging にせよ、べつに「**でなきゃ使えない」って事はありません。所詮 GDI+ や WIC のラッパライブラリにすぎないのですから、WinForm で System.Windows.Media.Imaging を使ったり WPF で System.Drawing を使っても何の問題もありません。単にそのウィンドウシステムがネイティブで使用している画像ライブラリが System.Drawing だったり System.Windows.Media.Imaging だったりするだけです。
画像処理ライブラリとしては、WIC には扱いづらい面があります。System.Drawing / GDI+ を考えた方が楽な場合もあるでしょう。特に System.Drawing は DLL も WinForm からは独立してるので、そう否定的に捕らえることもないと思います。
さて、System.Windows.Media.Imaging では基本的に BitmapSource のチェーンで変換を適用していくことになります。スケーリング(および回転)は TransformedBitmap を使います。難点は補間方法を選択できなかったはずってところぐらいですかね。
- BitmapImage とか BitmapDecoder とかで元画像をロード
- それを元に TransformedBitmap を作成(ScaleTransform を使ってスケーリング)
- それを元に BitmapFrame.Create で BitmapFrame を作成
- ***BitmapEncoder を作って、Frames に BitmapFrame を追加して Save
という流れになるかと思います。
-
こんにちは、HANA01 さん。
MSDN フォーラムのご利用ありがとうございます。フォーラム オペレーターの山本です。
その後いかがでしょうか。
みなさんからの情報はご確認いただけましたか?
有効な情報と思われるものに、勝手ながらわたしのほうで回答としてマークさせていただきました。
投稿いただいたみなさん、情報ありがとうございました。
いただいた返信の中で、解決に役立った情報や、参考になった情報には、回答としてマークすることをお願いしています。
今後、同じ問題でこのスレッドを参照される方にも、有効な情報がわかりやすくなるかと思いますので、ご協力よろしくお願いいたします。
リサイズさせる方法について、検索してみたところ、米国本社のサイトにそれらしきタイトルのものがありましたので、もしかしたら参考になるかもしれません。(試していないので、間違っていたらごめんなさい。)
Resizing Image
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/580fca03-d15b-48b2-9fb3-2e6fec8a2c68
もしよろしければ、お時間のある時にでも状況をお知らせくださいね。
一旦回答としてマークをつけさせていただきましたが、ご不明点などありましたら、具体的な不明点などを記載いただいて、ご質問を続けてくださいね。
今後とも、MSDN フォーラムをご利用よろしくお願いいたします。それでは。
マイクロソフト株式会社 MSDN フォーラム オペレーター 山本 春海