Image Sourceで使用できるのはBitmapSourceのみですか?
-
06-07-2019 - |
質問
ImageコントロールのコンテンツとしてBitmapsourceオブジェクトを使用できますが、Bitmapオブジェクトしか持っていない場合、次の方法を使用してBitmapをBitmapsouceに変換すれば、直接使用できます:
Bitmap bitmap = imageObjToBeConvert;
IntPtr HBitmap = bitmap.GetHbitmap();
result = Imaging.CreateBitmapSourceFromHBitmap
(HBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
DeleteObject(HBitmap);
bitmap.Dispose();
しばらく時間がかかります。ビットマップを直接使用する方法はありますか?
そして、BitmapSourceを直接解放することはできないようです。Bitmapsouceが再び使用されなくなった後、すぐにメモリを解放するサンプルメソッドはありますか。
解決
いいえ、 Bitmap
を直接使用することはできません。これは、 System.Drawing.Bitmap
はGDI +ビットマップであり、 System.Windows.Media.Imaging
の BitmapImage
のようなクラスはD3D / DirectXであるためです。 。
メモリ使用量に関しては、直接解放することはできませんが、通常、バックグラウンドで行われる何らかのキャッシュがあります。キャッシュを無視するように BitmapImage
をロードする方法があります。
他のヒント
- System.Windows.Media.Imaging .. ::。BitmapFrame
- System.Windows.Media.Imaging .. ::。BitmapImage
- System.Windows.Media.Imaging .. ::。CachedBitmap
- System.Windows.Media.Imaging .. ::。ColorConvertedBitmap
- System.Windows.Media.Imaging .. ::。CroppedBitmap
- System.Windows.Media.Imaging .. ::。FormatConvertedBitmap
- System.Windows.Media.Imaging .. ::。RenderTargetBitmap
- System.Windows.Media.Imaging .. ::。TransformedBitmap
- System.Windows.Media.Imaging .. ::。WriteableBitmap
これらのクラスはすべてBitMapSourceを継承しているため、いずれのクラスもそのコンテキストで使用できます。
所属していません StackOverflow