2009-03-14 13 views
11

मुझे स्क्रीनशॉट की एक श्रृंखला को पकड़ने और उन्हें एक फिल्म में संयोजित करने की आवश्यकता है। मैं स्क्रीन पर कब्जा करने के लिए जावा रोबोट कक्षा का उपयोग करने की कोशिश कर रहा हूं।जावा रोबोट createScreenCapture प्रदर्शन

लेकिन createScreenCapture() विधि मेरी मशीन पर 1 सेकंड से अधिक समय लेती है। मुझे 1 एफपीएस भी नहीं मिल सकता है। क्या इसे गति देने का कोई तरीका है? या कोई अन्य एपीआई है?

संपादित करें: यह एक buffered छवि आवंटित कर रहा है।

BufferedImage image = robot.createScreenCapture (स्क्रीन); // स्क्रीनशॉट को jpg के रूप में सहेजें
फ़ाइल फ़ाइल = नई फ़ाइल ("छवियां/स्क्रीन" + अनुक्रमणिका + ".jpg");
ImageIO.write (छवि, "jpg", फ़ाइल); सूचकांक ++;

इसे jpg फ़ाइल में लिखने में लगभग 200 मीटर लगते हैं जहां BufferedImage को लगभग 1400ms लगते हैं।

उत्तर

2

मैं इसके लिए सी या सी ++ के साथ जाने का सुझाव देना चाहता हूं, इसमें हार्डवेयर की अधिक सीधी पहुंच है।

यदि आप पूर्ण अधिकतम प्रदर्शन ड्राइवर स्तर पर जाना चाहते हैं और केवल वीडियो कार्ड से डेटा ले लें। इस तरह के चालक को ढूंढना मुश्किल है क्योंकि इसका उपयोग किसी भी प्रतिलिपि सुरक्षा को आसानी से हराने के लिए किया जा सकता है क्योंकि यह डेटा को पकड़ने के बाद स्क्रीन पर जा रहा है।

लेकिन यदि आपको जावा और रोबोट के साथ रहना है, तो क्या आप वाकई यह एक फ़ंक्शन कॉल है जो इतना समय ले रहा है? यह BufferedImage आवंटित नहीं है या कुछ और?

+0

हां 'createScreenCapture() '' BufferedImage' आवंटित करता है, और सभी पिक्सेल को 'INT_RGBA' प्रारूप में परिवर्तित करता है, जो अधिकतर समय लेता है। – finnw

1

विभिन्न स्क्रीन सेटिंग्स के साथ प्रयोग करने का प्रयास करें। रंग गहराई इसे प्रभावित करेगी क्योंकि एडब्ल्यूटी को सबकुछ एक आम रास्टर प्रारूप में परिवर्तित करना है।

मेरे पीसी से कुछ उदाहरण समय: तो मैं उन गहराई के साथ परीक्षण करने में असमर्थ था

Resolution | Depth | Time taken 
------------+-------+------------ 
1280x1024 | 32 | 215ms 
1280x1024 | 16 | 155ms 
1600x900 | 32 | 235ms 

मेरे एडाप्टर 24bpp या 64bpp ऐसा नहीं कर सकते, लेकिन मुझे लगता है कि है कि वे परिवर्तित करने के लिए और अधिक CPU चक्र की आवश्यकता होगी।

संबंधित मुद्दे