मैं एक बहुत चारों ओर देखा है और केवल तरीकों मैं एक बिटमैप से एक Texture2D बनाने के लिए मिल गया है कर रहे हैं:क्या XNA में बिटमैप ऑब्जेक्ट से Texture2D बनाने का कोई तेज़ विकल्प है?
using (MemoryStream s = new MemoryStream())
{
bmp.Save(s, System.Drawing.Imaging.ImageFormat.Png);
s.Seek(0, SeekOrigin.Begin);
Texture2D tx = Texture2D.FromFile(device, s);
}
और
Texture2D tx = new Texture2D(device, bmp.Width, bmp.Height,
0, TextureUsage.None, SurfaceFormat.Color);
tx.SetData<byte>(rgbValues, 0, rgbValues.Length, SetDataOptions.NoOverwrite);
कहाँ rgbValues बिटमैप के युक्त एक बाइट सरणी है 32-बिट एआरबीबी प्रारूप में पिक्सेल डेटा।
मेरा सवाल है, क्या कोई तेज दृष्टिकोण है जिसे मैं कोशिश कर सकता हूं?
मैं कस्टम प्रारूप छवियों (मानचित्र टाइल) में पढ़ सकते हैं और उन्हें Texture2D बनावट में तब्दील प्रदर्शित करने के लिए करने के लिए है जो एक नक्शा संपादक लिख रहा हूँ। संपादक का पिछला संस्करण, जो एक सी ++ कार्यान्वयन था, ने छवियों को पहले बिटमैप्स में परिवर्तित किया और फिर डायरेक्टएक्स का उपयोग करके तैयार किए गए बनावट में। मैंने यहां एक ही दृष्टिकोण का प्रयास किया है, हालांकि उपरोक्त दोनों दृष्टिकोण काफी धीमे हैं। स्मृति में लोड करने के लिए मानचित्र के लिए आवश्यक सभी बनावट पहले दृष्टिकोण ~ 250 सेकंड के लिए लेते हैं और दूसरे दृष्टिकोण के लिए ~ एक उचित स्पेक कंप्यूटर पर 110 सेकंड (तुलना के लिए, सी ++ कोड में लगभग 5 सेकंड लगते हैं)। यदि सीधे बनावट के डेटा को संपादित करने की कोई विधि है (जैसे बिटमैप क्लास की लॉकबिट विधि के साथ) तो मैं कस्टम-प्रारूप छवियों को सीधे Texture2D में परिवर्तित करने और प्रसंस्करण समय को सहेजने में सक्षम हो जाऊंगा।
किसी भी मदद की बहुत सराहना की जाएगी।
धन्यवाद
"कैली" के बजाय "कॉलर से" नहीं होना चाहिए? इस कोड के उपयोगकर्ता के प्रयोजनों से, यह वह कार्य है जो कैली है। – drxzcl
आपकी प्रतिक्रिया के लिए धन्यवाद, हालांकि मेरा मतलब है कि मैंने अपने मूल प्रश्न में कहा था कि मैंने इस दृष्टिकोण की कोशिश की है - SetData() का उपयोग कर। मैंने कुछ और विश्लेषण चलाया, और लॉकबिट्स का उपयोग करके बिटमैप्स बनाने के लिए 2.7 सेकंड लिया। जब मैंने उस कोड में जोड़ा, प्रत्येक बिटमैप जेनरेट के लिए: बनावट 2 डी टीएक्स = नया बनावट 2 डी (डिवाइस, बीएमपी। विथथ, बीएमपी.हेइट, 0, TextureUsage.None, SurfaceFormat.Color); यह 74 सेकंड के लिए आवश्यक समय ऊपर उठाया !! बस प्रत्येक बिटमैप के लिए एक खाली बनावट बनाने के लिए, और इसे भर भी नहीं। इस प्रकार का लोडिंग समय 2 डी गेम के लिए स्वीकार्य नहीं है। मुझे नहीं लगता था कि एक्सएनए धीमा होगा। :/ –
@Ranieri, धन्यवाद - तय! – bufferz