محاولة إحضار إطار التأرجح إلى الأمام قبل أخذ لقطة شاشة ولكن الحصول على القطع الأثرية

StackOverflow https://stackoverflow.com/questions/1280333

سؤال

لدي جزء من التطبيق الخاص بي الذي يأخذ لقطة شاشة نافذة معينة ولكن قبل أن أفعل ذلك، أريد إحضار النافذة إلى الأمام. هذا يعمل بشكل جيد على جهاز Mac الخاص بي، لكن عندما اختبرته في نظام التشغيل Windows XP على Parallels، فإن لقطة الشاشة تحتوي دائما على منطقة رمادية خارج حيث كانت النافذة المتداخلة. يبدو أن لقطة الشاشة تؤخذ دائما بينما يتم نقل النافذة التي أريدها في الأعلى إلى الأعلى. لقد حاولت استخدام كليهما:

     frame.setVisible(true);
            and
     frame.setAlwaysOnTop(true);

هل لدى أي شخص حل معقول لهذه المشكلة؟

هل كانت مفيدة؟

المحلول

إذا كنت تحاول التقاط لقطة شاشة من النافذة w رسمت بواسطة Java، يمكنك فقط طلبها أن ترسم نفسها على

BufferedImage bi = new BufferedImage(
    w.width, w.height, BufferedImage.TYPE_INT_RGB); 
Graphics g = bi.getGraphics();

عن طريق استدعاء النوافذ paint(g) طريقة. يمكنك بعد ذلك حفظ BufferedImage إلى ملف. إذا كنت تجمع نافذة خارجية، فأنا أعتقد أن رييس أوسكار قد أعطاك جميع الإجابات.

نصائح أخرى

  • يمكنك إضافة تأخير الخيط الذي يأخذ لقطة الشاشة.

  • يمكنك إطفاء لقطة شاشة من الإطار عندما اكتسبت التركيز:

    class ScreenshotShooter implements FocusListener  {
        public void focusGained( FocusEvent e ) {
            // smile..... 
            // you may add a sec of delay here just be be sure.
        }
        public void focusLost( FocusEvent e ) {}
     }
    
    
     FocusListener focusListener = new ScreenshotShooter();
     frame.addFocusListener( focusListener );
     frame.setVisible( true ); // should autofire
     frame.remoe( focusListener);
    
  • يمكنك القيام كليهما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top