PracticU

מצלמה - חלק 1 - צילום תמונה

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › מצלמה - חלק 1 - צילום תמונה
מילון מושגים:
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
Intent - ב-Android, אובייקט הודעה שמבקש פעולה, למשל מעבר בין מסכים או הפעלת רכיב אחר.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
אמולטור - תוכנה שמחקה מכשיר או סביבה אחרת, למשל כדי להריץ ולבדוק אפליקציית מובייל על המחשב.

מצלמה - חלק 1 - צילום תמונה
רוצים שהמשתמש ילחץ על לחצן באפליקציה, יצלם תמונה באפליקציית המצלמה של המכשיר, ושהתמונה תוצג ב-ImageView של האפליקציה שלנו. זה נעשה עם Intent מרומז.
השלבים העיקריים
1. Intent מרומז: יוצרים new Intent עם הפעולה MediaStore.ACTION_IMAGE_CAPTURE. לא מציינים איזו אפליקציה להפעיל, והמערכת פותחת את אפליקציית המצלמה.
2. startActivityForResult: מפעילים את ה-Intent עם startActivityForResult ולא עם startActivity, כי רוצים לקבל חזרה את התמונה. מגדירים קבוע REQUEST_CODE_TAKE_PICTURE עם הערך 1.
3. דריסת onActivityResult: בודקים ששני התנאים מתקיימים: ה-request code שווה לקבוע שהוגדר, ו-resultCode הוא RESULT_OK. אם המשתמש ביטל, לא קורה דבר.
4. שליפת התמונה: התמונה נמצאת ב-data.getExtras(), שהוא Bundle. מוציאים ממנו את המפתח data עם cast ל-Bitmap.
5. הצגה: מאתרים את ה-ImageView ב-findViewById וקוראים ל-setImageBitmap. ה-Bitmap מכיל את כל הפיקסלים של התמונה.
בדיקה
באמולטור אין מצלמה אמיתית, ולכן נפתחת אפליקציית דמו שמצלמת תמונה קבועה. באישור (V) התמונה מוצגת, ובביטול חוזרים לאפליקציה בלי שינוי. אותו קוד עבד גם על מכשיר אמיתי עם המצלמה שלו.
כעת אפשר להפנות את המשתמש לצלם תמונה ולהציג אותה באפליקציה. בשיעור הבא נראה איך שומרים אותה בקובץ.
השיעור הבא בקורס: מצלמה - חלק 2 - שמירת קובץ PNG

פרקי ההרצאה: מצלמה - חלק 1 - צילום תמונה

  1. 00:00

    צילום תמונה מתוך האפליקציה

  2. 00:58

    Implicit Intent עם ACTION_IMAGE_CAPTURE

  3. 01:58

    startActivityForResult ו-Request Code

  4. 02:42

    onActivityResult ובדיקת התוצאה

  5. 03:55

    שליפת ה-Bitmap מה-Extras

  6. 04:33

    הצגת התמונה ב-ImageView

תמלול ההרצאה: מצלמה - חלק 1 - צילום תמונה

הטקסט המלא של הדקות הראשונות בהרצאה «מצלמה - חלק 1 - צילום תמונה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

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

  2. 00:15

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

  3. 00:31

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

  4. 01:05

    אז בואו נפתח intent, נגדיר שווה new intent וזה כמובן implicit כי אנחנו לא אומרים לו איזו אפליקציה להפעיל ואנחנו צריכים לגשת ל-intent ולתת לו אקשן והאקשן שאנחנו נותנים לו זה האקשן עם הקבוע הבא media store שזה בעצם איזושהי מחלקה שמכילה בתוכה כל מיני קבועים שקשורים למדיה, ל-image, לוידאו, לסקנרים וכדומה.

  5. 01:39

    ואנחנו רוצים Action Image Capture. זה בעצם קבוע שמציין בדיוק את האקשן שאנחנו צריכים לתת עבור האינטנט הזה, כך שהוא יפתח לנו את האפליקציה המתאימה שמטפלת במצלמה. וכל מה שאנחנו רוצים זה להריץ אותו.

  6. 01:56

    אבל אנחנו לא רוצים to start activity, אלא start activity for result, כי אנחנו גם רוצים לקבל בחזרה את התמונה שצולמה וזה אומר שהאפליקציה הזאת מחזירה לנו מידע שזאת התמונה ואז אנחנו נוכל להציג אותה.

  7. 02:13

    אז הנה יש לנו פה את ה-Intent ואנחנו רוצים איזשהו request code אז בואו נייצר פה למעלה private final static integer ואנחנו רוצים request code take picture נניח ניתן לו אחד נעתיק את ה-request code נדביק אותו פה וכעת זה יפתח לנו את האפליקציה של המצלמה.

  8. 02:49

    הדבר הבא שאנחנו רוצים לבצע זה לדרוס את הפונקציה onActivityResult. בפונקציה הזאת אנחנו הולכים לקבל בחזרה את התמונה.

  9. 03:01

    בואו ניפטר פה מהדירקטיב הזה. ואנחנו רוצים כמובן לבצע בדיקה האם ה-requestCode שאנחנו מקבלים בחזרה שווה ל-requestCode.picture.takePicture שהגדרנו למעלה.

  10. 03:19

    ואנחנו רוצים גם לבדוק את ה-result code, מפני שאפליקציית התמונה בדרך כלל מה שהיא תעשה היא תגיד למשתמש האם אתה רוצה לאשר או לבטל. אם המשתמש מבטל אז ה-request code יהיה כזה של ביטול.

  11. 03:32

    רק אם המשתמש מאשר ורוצה באמת לשמור את התמונה, אז אנחנו רוצים לבצע פעולה ולהציג אותה או לשמור אותה. לכן אנחנו רוצים לבדוק האם המשתמש לחץ על אישור באפליקציה הזאת וזה יהיה result OK. במידה ושני הקבועים האלה בדיוק מה שאנחנו מצפים, מה שאנחנו רוצים לעשות זה לשלוף את התמונה.

  12. 03:56

    התמונה נמצאת בתוך הדאטה, באינטנט של הדאטה, בתוך אקסטראז. קודם כל אנחנו צריכים לשלוף אקסטראז. אקסטראז זה בנדל, ובנדל זה בעצם אוסף של key values שניתן למלא אותו בערכים, ולכל value יש את ה-key שלו.

  13. 04:16

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

  14. 04:36

    כמובן שאנחנו צריכים כאן איזשהו casting והנה שלפנו את התמונה, כל מה שנשאר לנו לעשות זה לגשת ל-image view ולכן אנחנו צריכים לקחת את ה-id הזה, להגדיר אותו פה למעלה, private image view לאתר אותו כמובן, image view picture שווה image view find view by ID והנה איתרנו אותו ועכשיו אנחנו צריכים לגשת אליו,

  15. 05:16

    image view picture ו-to set image bitmap כי יש לנו כבר את הביטמאפ

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Content Provider - חלק 5

ההרצאה הבאה: מצלמה - חלק 2 - שמירת קובץ PNG

הרצאות קשורות מקורסים אחרים

  • הזזת מצלמה
  • הוספת תמונה למוצר
  • הצגת תמונה ב-React
  • כתיבת טסטים - צילום מסך

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון