質問

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を継承しているため、いずれのクラスもそのコンテキストで使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top