Les bitmaps Direct2D sont des ressources dépendantes du matériel et ne sont généralement pas facilement accessibles depuis le côté CPU du système. Atteindre les pixels du ID2D1Bitmap
est donc difficile, il n'est pas conçu non plus, il est destiné à être utilisé de cette façon. Tout mécanisme qui obtient des octets bruts à partir d'un bitmap Direct2D le fait généralement en créant un bitmap WIC à partir de celui-ci pour accéder au flux d'octets. De cette façon, vous pouvez l'écrire dans un fichier ou même un tableau d'octets et utiliser un peu d'interop pour y accéder en C#. Si vous voulez l'écrire dans un fichier et le lire dans WPF, ce mécanisme fonctionnera. Si vous avez les données bitmap dans un objet IWICBitmapSource
à un moment pendant le traitement, et si vous pouvez le mettre en cache, le travail serait plus facile. La conversion d'un System.Drawing.Bitmap
en un System.Windows.Media.ImageSource
est répondu ici: Converting Bitmap to ImageSource (Merci à @MSL qui a souligné la réponse ci-dessus dans les commentaires). À ce stade, la façon dont vous l'utilisez est un peu floue, un peu plus d'informations sur l'utilisation prévue ou un échantillon court aiderait vraiment ici.
EDIT 1: Jetez un oeil à ce SO Qn: Save ID2D1Bitmap to file et les commentaires pour une version de code qui enregistre un ID2D1Bitmap
dans un fichier. Il effectue essentiellement la conversion à IWICBitmap
et l'écrit dans un fichier. À cette étape, puisque IWICBitmap
hérite de IWICBitmapSource
, vous pouvez même utiliser la méthode CopyPixels()
pour vider les données bitmap dans un tableau d'octets, si vous le souhaitez.
Maintenant, si vous allez à l'approche de l'enregistrer dans un fichier, obtenir un System.Drawing.Bitmap
est aussi simple que:
bitmap = new Bitmap("<YOUR_BITMAP_FILENAME>")
Et vous pouvez le convertir en un BitmapImage pour une utilisation dans WPF comme:
using(MemoryStream memstream = new MemoryStream())
{
bitmap.Save(memstream, ImageFormat.Bmp);
memstream.Position = 0;
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memstream;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
}
Peut-être que cela peut vous aider. [Convertir Bitmap en ImageSource] (http://stackoverflow.com/questions/26260654/wpf-converting-bitmap-to-imagesource) – MSL
Avez-vous vu ceci: https://github.com/Microsoft/WPFDXInterop, et avez-vous avoir un exemple de code avec lequel on peut jouer? –
Pourquoi ne répondez-vous pas aux personnes qui essaient d'aider? –