Domanda

Possiamo usare l'oggetto Bitmapsource come contenuto di un controllo Image, tuttavia se ho solo un oggetto Bitmap, posso usarlo direttamente, se converto Bitmap in Bitmapsouce usando il seguente metodo:

        Bitmap bitmap = imageObjToBeConvert;
        IntPtr HBitmap = bitmap.GetHbitmap();
        result = Imaging.CreateBitmapSourceFromHBitmap
            (HBitmap,
            IntPtr.Zero,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());
        DeleteObject(HBitmap);
        bitmap.Dispose();

Ci vuole del tempo. Esiste un modo per utilizzare direttamente Bitmap?

E ho scoperto che BitmapSource sembra non poter essere rilasciato direttamente, esiste un metodo di esempio per rilasciare immediatamente la memoria, dopo che Bitmapsouce non viene usato di nuovo.

È stato utile?

Soluzione

No, non puoi utilizzare Bitmap direttamente. Questo perché System.Drawing.Bitmap è un bitmap GDI +, mentre classi come BitmapImage in System.Windows.Media.Imaging sono D3D / DirectX .

Per quanto riguarda l'utilizzo della memoria, non è possibile rilasciarlo direttamente, ma di solito c'è una sorta di cache che va in background. Esistono modi per caricare un BitmapImage in modo che ignori la cache.

Altri suggerimenti

  • 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

Tutte queste classi ereditano da BitMapSource, quindi ognuna di esse potrebbe essere utilizzata in quel contesto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top