2010-05-02 3 views
2

J'ai écrit ma propre bibliothèque de fonctions pour accéder à certaines des nouvelles bibliothèques Windows Direct2D. En particulier, j'ai travaillé sur l'interface ID2D1Bitmap. Je voulais écrire une fonction pour retourner un pointeur vers le début des données bitmap (pour l'édition de pixels particuliers, ou l'encodage personnalisé ou tout ce que je pourrais souhaiter dans le futur). Malheureusement ... problème à venir ...Programmation Windows: Interface ID2D1Bitmap - Obtention des données bitmap

Je n'arrive pas à trouver un moyen d'accéder aux données de pixels brutes de l'interface ID2D1Bitmap.

Est-ce que quelqu'un a une idée pour y accéder? Un de mes amis a suggéré de dessiner le bitmap sur une surface et d'en extraire les données bitmap. Je ne sais pas si cela fonctionnerait. Cela semble définitivement inefficace et je ne saurais pas quel type de surface utiliser.

Toute aide est appréciée. (C++ en particulier, mais je suppose que le code ne sera pas trop différent entre les langues)

(Je sais que je pourrais juste lire dans les données directement à partir du fichier, mais j'utilise les décodeurs WIC ce qui signifie qu'il pourrait être dans un certain nombre de formats indéchiffrables)

Répondre

0

Puisque vous utilisez le décodeur WIC, vous devriez pouvoir utiliser IWICBitmap::Lock directement pour obtenir les données bitmap.

1

En général, vous ne pouvez pas accéder aux données ID2D1Bitmap. Pensez à est en tant que données GPU seulement. Cependant, avec certaines limitations, vous pourrez peut-être accéder aux données en utilisant d'autres interfaces en fonction de la façon dont votre bitmap a été créé. Comme votre bitmap est soutenu par IWICBitmap, vous utilisez Lock. [(Bigger example: How to Modify the Pixels of a Bitmap Source)]

Si le bitmap est soutenu par ID3D11Texture2D, vous utiliserez un Map. Dans le cas de IDXGISurface, vous pouvez utiliser GetDC.

Questions connexes