System.Windows.Media.ImageSourceをC#のSystem.Drawing.Bitmapに変換するにはどうすればよいですか?System.Windows.Media.ImageSourceをSystem.Drawing.Bitmapに変換します。
答えて
HOW TO USE IMAGESOURCE (NO HANDLER) IN WINFORMS AS SYSTEM.DRAWING.BITMAP (HBITMAP)を参照してください。
簡単にあなたがこの 記事から学んだWPF ImageSourceはにリサイズ System.Drawing.Bitmapを変換する方法。今日、私はどのように行うか説明します それは逆です。実際には、 に彼が持っているすべてのですが、 たBitmapSourceからハンドラを抽出することである、しかし、このようなアプローチ は、サポートされていないので、私たちにできる唯一のこと は たBitmapSource(またはBitmapFrame)のピクセルを単にコピーされ バイト配列にして、それらをHBitmapの ポインタにコピーします。
これまでのOPでも、dll interopやクリップボードのハッキングがなくても、よりクリーンなソリューションを見つけるには時間がかかりました。
これは私のために働いた、あなたはファイルに保存する前に画像のサイズを削減するためにpngencoderを使用することができますまたはRTFストリーム
private System.Drawing.Image ImageWpfToGDI(System.Windows.Media.ImageSource image) {
MemoryStream ms = new MemoryStream();
var encoder = new System.Windows.Media.Imaging.BmpBitmapEncoder();
encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(image as System.Windows.Media.Imaging.BitmapSource));
encoder.Save(ms);
ms.Flush();
return System.Drawing.Image.FromStream(ms);
}
アルファチャンネル(透過部分を含む)で画像を変換する必要がある場合は、System.Windows.Media.Imaging.BmpBitmapEncoder()の代わりにSystem.Windows.Media.Imaging.PngBitmapEncoder()を使用してください。 –
@DariuszWasacz私はこの答えを得ることができません。それはimage.Sourceが動作しないと文句を言う:** 'System.Drawing.Image'は 'Source'の定義を含んでおらず、 'System.Drawing.Image'タイプの最初の引数を受け入れる拡張メソッド 'Source'見つかった** 私はMSDNをチェックし、ImageはSourceプロパティを持っていません。何を修正する必要があるか考えていますか? –
@kayleeFrye_onDeck:System.DrawingとSystem.Windows.Mediaの両方の名前空間にクラス 'Image'が含まれています。引数 'System.Windows.Media.Image image'のネームスペースを省略したように見え、 'System.Drawing.Image'はステートメントを使用したものです。あなたのコードが上記とまったく同じかどうか確認してください。 –
- 1. 'System.Drawing.Bitmap'を 'Emgu.CV.IImage'に変換する
- 2. 32bit System.Drawing.Bitmapを8bitに変換する
- 3. 結果にSystem.Drawing.ImageをSystem.Windows.Media.ImageSourceに変換する
- 4. System.Drawing.Bitmapオブジェクトからcv :: Matに変換すると、ビットマップがマングリングされる
- 5. ASP.NET MVCスマートフォンWebアプリケーションのQRコードスキャナ/デコーダ - System.Drawing.BitmapからZXing.LuminanceSourceに変換できない
- 6. System.Drawing.BitmapのC#OutOfMemoryException
- 7. DataGridViewイメージは単に "System.Drawing.Bitmap"を表示します
- 8. VisualBrushを使用してWPFエリアのSystem.Drawing.Bitmapを取得します。
- 9. System.Drawing.BitmapをWriteableBitmapの領域にコピー
- 10. System.Drawing.Bitmap領域からWPFでイメージを作成してサイズを変更する
- 11. CFStringをCFStringRefに変換し、CFErrorRefをCFErrorに変換します。
- 12. 変数をconstに変換します
- 13. ファイルを変換します.InputstreamをUTF-8に変換します。C#
- 14. C#System.Drawing.Bitmapから効率的にピクセルデータを取得する
- 15. varcharをdatetimeに変換するときに変換に失敗しました
- 16. System.Drawing.BitmapとSystem.Drawing.ImageConverterを解決できません
- 17. varcharをINTに変換するときに変換が失敗しました
- 18. intに変換する前にnullフィールドをゼロに変換しますか?
- 19. SQLをHQLに変換しますか?
- 20. NSIntegerをNSUIntegerに変換しますか?
- 21. System.Web.UI.WebControls.ImageをSystem.Drawing.Imageに変換しますか?
- 22. NSStringをUTF8Stringに変換しますか?
- 23. オブジェクトをintに変換します
- 24. QSetting値をStdStringに変換します
- 25. NSStringをconst char *に変換します。
- 26. intをcharに変換しますか?
- 27. イメージをバイナリに変換しますか?
- 28. SQLiteをHTMLに変換しますか?
- 29. イメージをXAMLに変換しますか?
- 30. jQueryをプロトタイプに変換します
これと前回の記事はどちらも同じアプローチです:バイト配列にビットマップのスキャンラインをコピーして、メモリブロックからビットマップを作成します。ビットマップは、ビットマップ・ライフタイム中にメモリ・ブロックに走査線が含まれていることを前提としています。ただし、固定(バイト* pB =ビット)コードを残した後、.netメモリマネージャによってメモリが上書きされ、ビットマップが破損することがあります。解決策は、Marshal.AllocHGlobalを使用することですが、この場合、メモリブロックはユーザーコードによってメンテナンスする必要があります(Marshal.FreeHGlobalによって使用後に解放する必要があります)。 –