צילום תמונות באמצעות Java

1. הקדמה

במדריך זה נבחן כמה דרכים שונות לצילום צילום מסך בג'אווה.

2. צילום מסך באמצעות רוֹבּוֹט

בדוגמה הראשונה שלנו, נצלם צילום מסך של המסך הראשי.

לשם כך נשתמש ב- createScreenCapture () שיטה מה- רוֹבּוֹט מעמד. זה לוקח a מַלבֵּן כפרמטר שקובע את הגבולות לצילום המסך ומחזיר a BufferedImage לְהִתְנַגֵד. ה BufferedImage ניתן להשתמש נוסף ליצירת קובץ תמונה:

@Test ציבורי בטל givenMainScreen_whenTakeScreenshot_thenSaveToFile () זורק חריג {מלבן screenRect = מלבן חדש (Toolkit.getDefaultToolkit (). GetScreenSize ()); לכידת BufferedImage = רובוט חדש (). CreateScreenCapture (screenRect); קובץ imageFile = קובץ חדש ("single-screen.bmp"); ImageIO.write (לכידה, "bmp", imageFile); assertTrue (imageFile .exists ()); }

ממדי המסך נגישים דרך אַרְגַז כֵּלִים בכיתה באמצעות שלה getScreenSize () שיטה. במערכות עם מספר מסכים, התצוגה הראשית משמשת כברירת מחדל.

לאחר לכידת המסך לתוך BufferedImage, אנחנו יכולים לכתוב את זה לקובץ עם ImageIO.write (). לשם כך נצטרך שני פרמטרים נוספים. פורמט התמונה וקובץ התמונה עצמו. בדוגמה שלנו, אנו משתמשים ב-.bmp פורמט, אבל אחרים אוהבים.png, .jpg אוֹ .gif זמינים גם כן.

3. צילום מסך של מספר רב של מסכים

אפשר גם לצלם צילום מסך של מספר תצוגות בו זמנית. בדיוק כמו בדוגמה הקודמת, אנו יכולים להשתמש ב- createScreenCapture () שיטה מה- רוֹבּוֹט מעמד. אך הפעם גבולות צילום המסך צריכים לכסות את כל המסכים הנדרשים.

על מנת לקבל את כל התצוגות, נשתמש ב- גרפיקהסביבה הכיתה שלה getScreenDevices () שיטה.

לאחר מכן, אנו הולכים להביא את הגבול של כל מסך נפרד וליצור מַלבֵּן שיתאים לכולם:

@Test הציבורי בטל givenMultipleScreens_whenTakeScreenshot_thenSaveToFile () זורק חריג {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice [] screens = ge.getScreenDevices (); מלבן allScreenBounds = מלבן חדש (); עבור (מסך GraphicsDevice: מסכים) {מלבן screenBounds = screen.getDefaultConfiguration (). getBounds (); allScreenBounds.width + = screenBounds.width; allScreenBounds.height = Math.max (allScreenBounds.height, screenBounds.height); } לכידת BufferedImage = רובוט חדש (). CreateScreenCapture (allScreenBounds); קובץ imageFile = קובץ חדש ("all-screens.bmp"); ImageIO.write (לכידה, "bmp", imageFile); assertTrue (imageFile.exists ()); }

תוך כדי איטרציה מעל התצוגות, אנו תמיד מסכמים את הרוחבים ובוחרים רק גובה מרבי אחד שכן המסכים יורכבו אופקית.

בהמשך הדרך עלינו לשמור את תמונת המסך. כמו בדוגמה הקודמת, אנו יכולים להשתמש ב- ImageIO.write () שיטה.

4. צילום מסך של רכיב GUI נתון

אנו יכולים גם לצלם צילום מסך של רכיב ממשק משתמש נתון.

לממדים ניתן לגשת בקלות דרך ה- getBounds () שיטה שכן כל רכיב מודע לגודלו ולמיקומו.

במקרה זה, אנחנו לא נשתמש ב- רוֹבּוֹט ממשק API. במקום זאת, אנו נשתמש ב- צֶבַע() שיטה מה- רְכִיב בכיתה שתמשוך את התוכן ישירות אל BufferedImage:

@Test ציבור בטל givenComponent_whenTakeScreenshot_thenSaveToFile (רכיב רכיב) זורק חריג {מלבן componentRect = component.getBounds (); BufferedImage bufferedImage = BufferedImage חדש (componentRect.width, componentRect.height, BufferedImage.TYPE_INT_ARGB); component.paint (bufferedImage.getGraphics ()); קובץ imageFile = קובץ חדש ("component-screenshot.bmp"); ImageIO.write (bufferedImage, "bmp", imageFile); assertTrue (imageFile.exists ()); }

לאחר קבלת האגודה של הרכיב עלינו ליצור את ה- BufferedImage. לשם כך אנו זקוקים לרוחב, לגובה ולסוג התמונה. במקרה זה, אנו משתמשים BufferedImage.TYPE_INT_ARGB המתייחס לתמונת צבע של 8 סיביות.

לאחר מכן אנו מתקדמים להפעיל את צֶבַע() שיטה למלא את BufferedImage וזהה בדוגמאות הקודמות אנו שומרים אותו בקובץ עם ImageIO.write () שיטה.

5. מסקנה

במדריך זה למדנו מספר דרכים כיצד לצלם צילומי מסך באמצעות Java.

כמו תמיד קוד המקור עם כל הדוגמאות במדריך זה זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found