2012-12-10 9 views
5

मैं सबसे अच्छा तरीका है के लिए देख रहा हूँ करने के लिए जल्दी और बार-बार "Blit" एक मैक ओएस एक्स खिड़की के भीतर एक विशिष्ट क्षेत्र के लिए आरजीबी बिटमैप डेटा, के प्रयोजन के लिए अंदर वास्तविक समय में एक कस्टम वीडियो इंजन से आने वाले वीडियो फ्रेम प्रदर्शित करना। डेटा एक साधारण सी-स्टाइल सरणी में है जिसमें 32-बीपीपी बिटमैप है।प्रदर्शित कस्टम वीडियो (आरजीबी बिटमैप डेटा) एक मैक ओएस एक्स विंडो

Win32 पर, मैं सेटअप HWND और HDC के चाहते, इसकी स्मृति अंतरिक्ष में कच्चे डेटा की प्रतिलिपि बनाएँ, और उसके बाद का उपयोग BitBlt()। iOS पर, मैं इसे UIImageView के माध्यम से किया है, हालांकि मैं पूरी तरह से है कि दृष्टिकोण (वास्तव में उस विशेष सीमित मामले में की जरूरत नहीं थी) के प्रदर्शन का आकलन नहीं किया। मेरे पास कोको के साथ मैक ओएस एक्स पर न तो उपलब्ध है, तो मुझे क्या करना चाहिए?

मुझे पता है कि मेरे लिए कई बुरा या जटिल तरीके यह पूरा करने के हैं, लेकिन मैं आशा करती हूं कि अनुभव के साथ किसी को कुछ है कि वास्तव में इस उपयोग और/या के लिए है करने के लिए मुझसे बात कर सकते हैं प्रदर्शन कुशल है, जबकि काफी सरल और विश्वसनीय होने ।

धन्यवाद!

उत्तर

2

मैं या तो अपने डेटा के साथ NSImage एस या CGImage एस बनाने और फिर उन्हें वर्तमान संदर्भ में खींचने की अनुशंसा करता हूं।

यदि आप NSImage का उपयोग करते हैं, तो आपको अपनी छवि के डेटा के साथ NSBitmapImageRep बनाना होगा। आपको डेटा कॉपी करने की आवश्यकता नहीं है, बस पॉइंटर को प्रारंभकर्ता के पैरामीटर में से एक के रूप में पास करें।

यदि आप CGImage का उपयोग करते हैं, तो आप CGBitmapContextCreate() का उपयोग कर बना सकते हैं, और ऊपर के रूप में, बस मौजूदा छवि डेटा पर एक सूचक पास करें। तो फिर तुम CGBitmapContextCreateImage() फोन करके इसमें से एक CGImage बना सकते हैं।

+0

धन्यवाद। मैंने अभी तक प्रदर्शन का आकलन नहीं किया है, लेकिन ऐसा लगता है कि यह अच्छी तरह से काम करता है। – Wookie

0

यह किया चाल ... (32-बीपीपी RGBA बिटमैप डेटा)

int RowBytes = Width * 4; 

NSBitmapImageRep * ImageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&Data pixelsWide:Width pixelsHigh:Height bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:RowBytes bitsPerPixel:32]; 

NSImage * Image = [[NSImage alloc] init]; 
[Image addRepresentation:ImageRep]; 

[ImageView setImage:Image]; 

एक Windows बिटमैप, लाल और नीले चैनलों लगा दिया जाता था (RGBA बनाम BGRA) की तुलना में, और निश्चित रूप से वाई पंक्तियां विपरीत क्रम में हैं (यानी ऊपर की ओर), लेकिन स्रोत डेटा में हेरफेर करके समायोजित करने के लिए यह इतना आसान है।