Est-il une alternative rapide à la création d'un Texture2D à partir d'un objet Bitmap dans XNA?

J'ai regardé autour d'un lot, et les seules méthodes que j'ai trouvé pour la création d'un Texture2D à partir d'une image sont:

using  (MemoryStream s = new  MemoryStream())
{
   bmp.Save(s, System.Drawing.Imaging.ImageFormat.Png);
   s.Seek(0, SeekOrigin.Begin);
   Texture2D tx = Texture2D.FromFile(device, s);
}

et

Texture2D tx = new Texture2D(device, bmp.Width, bmp.Height,
                        0, TextureUsage.None, SurfaceFormat.Color);
tx.SetData<byte>(rgbValues, 0, rgbValues.Length, SetDataOptions.NoOverwrite);

Où rgbValues est un tableau d'octets contenant l'image des données de pixels en 32 bits format ARGB.

Ma question est, est-il plus vite que les approches que je peux essayer?

Je suis en train d'écrire un éditeur de carte qui est à lire dans la coutume-format des images (cartes) et de les convertir dans Texture2D textures à afficher. La précédente version de l'éditeur, qui est une implémentation C++, converti les images d'abord dans les bitmaps et puis en textures à tirer de l'utilisation de DirectX. J'ai tenté la même approche, cependant, les deux approches ci-dessus sont beaucoup trop lents. Pour charger en mémoire toutes les textures nécessaires pour une carte prend pour la première approche ~250 secondes et pour la deuxième approche ~110 secondes sur un raisonnable spec ordinateur (à titre de comparaison, le code C++ a pris environ 5 secondes). Si il y a une méthode pour modifier les données d'une texture directement (comme avec la classe Bitmap de la méthode LockBits) alors je serais en mesure de convertir le format des images directement dans un Texture2D et espérons, de gagner du temps de traitement.

Toute aide serait très appréciée.

Grâce

OriginalL'auteur Matthew Bowen | 2010-05-19