תכנות וזיהוי/פונקציות לטיפול בתמונות קבצים וחלונות

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

פונקציות ספריה לטיפול בתמונות[עריכה]

הפונקציה LoadBitmap[עריכה]

היא טוענת תמונת מפת סיביות מתוך קובץ הריצה לתוך משתנה מסוג מצביע-לתמונת-מפת-סיביות.

כך מוצגת שורה בה ממומשת הפונקציה בתוכנית :

;hbmMain = LoadBitmap(Hi, "khaki")

הפונקציה מקבלת 2 משתנים כמו שנזכר בטבלה :

משתנה מספר מסוג הסבר
1 HINSTANCE המצביע לחלון התוכנית
2 מחרוזת תווים המכיל את שם קובץ התמונה

הפונקציה BitBlt[עריכה]

היא לוקחת תמונת מפת סיביות ממקור אחד (הנמצא בתוך משתנה של תמונת מסך המחשב) וצובעת את התמונה (או חלק מהתמונה ) על מקור אחר .

כך מוצגת השורה בה ממומשת הפונקציה בתוכנית :

;BitBlt(hdc,0,0,b.bmHeight,b.bmWidth, hdcMemory,0,0,SRCPAINT)

הפונקציה מקבלת 9 מִשתנים ש - 5 מהם חשובים לתוכנית כל השאר מאופסים :

מִשתנה מספר מסוג הסבר
1 HDC המצביע לחלק הגרפי של החלון שניצבע
4 int גובה התמונה
5 int רוחב התמונה
6 HDC המצביע לחלק הגרפי שם נמצא מקור התמונה
9 DWORD הצביעה מבוצעת ע"י הפעלת "או לוגי" (OR) בין hdc ל - hdcMemory .

להסבר כל המשתנים שהפונקציה מקבלת עיין בפרקים הבאים.

פונקציות ספריה לטיפול בחלונות[עריכה]

הפונקציה WinMain[עריכה]

בתוכנה החלונית בשפת CPP היא הפונקציה ממנה מתחילים לפעול

היא מקבלת 4 מִשתנים ומחזירה משתנה חמישי :

  1. מקבלת מִשתנֶה מסוג HINSTANCE שהוא מייצג את מספר החלון (שכאן עתיד לא להיווצר) .
  2. מקבלת מִשתנֶה מסוג HINSTANCE שלא מעניין אותי .
  3. מקבלת מִשתנֶה מסוג LPSTR שלא מעניין אותי .
  4. מקבלת מִשתנֶה מסוג int שלא מעניין אותי .
  5. מחזירה מִשתנֶה מסוג int המסמל אם היא צלחה במשימה .

צריך לשים לב שהפונקציה הזאת מופעלת על ידי מערכת ההפעלה , לכן תפקידי הקלט פלט מתהפכים :

משתני הקלט בה הם משתנים שאנו מקבלים ממערכת ההפעלה, ומשתני פלט הם משתנים שאנו מחזירים למערכת ההפעלה.

הפונקציה CreateWindowEx[עריכה]

היא מקבלת הרבה מִשתנים. אותנו מעניין שהיא מקבלת מִשתנֶה hInstance מסוג HINSTANCE המייצג את מספר החלון,

מנסה ליצור חלון, ומחזירה משתנה שהוא מסוג מצביע לחלון HWND .

מִשתנֶה מסוג מקבל ערך שתפקידו
1 DWORD WS_EX_CLIENTEDGE לסמן שהחלון הזה הוא שייך לחלון הראשי, לשולחן העבודה
2 LPCSTR "MyWindowClass" שם מארז החלון , בתוכנית הזאת הוא לא משמש לכלום
3 LPCSTR " זיהוי צבע " שם החלון,בתוכנית הזאת הוא לא משמש לכלום
4 DWORD WS_OVERLAPPEDWINDOW לקבוע שהחלון חופף לחלון שולחן העבודה
5 int CW_USEDEFAULT בררת מחדל למיקום המאוזן של החלון ביחס לצג, בתוכנית הוא לא משמש כלום
6 int CW_USEDEFAULT בררת מחדל למיקום המאונך של החלון ביחס לצג, בתוכנית הוא לא משמש כלום
7 int רוחב החלון מפני שבתוכנית לא מציגים את החלון יכול להיות שהמספר 1 מספיק
8 int אורך החלון מפני שבתוכנית לא מציגים את החלון יכול להיות שהמספר 1 מספיק
9 HWND NULL מצביע לחלון האבא , אותנו לא מעניין
10 HMENU NULL תפריט החלון , לא מעניין
11 HINSTANCE hInstance מספר החלון שקיבלנו מהפונקציה WinMain
12 LPVOID NULL משתנה נוסף לא מעניין

כך מוצגת הפונקציה בתוכנית :

 hwnd = CreateWindowEx(
      WS_EX_CLIENTEDGE,
      "MyWindowClass" ,
      " זיהוי צבע ",
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT,
     WinHeight,WinWidth,
      NULL, NULL, hInstance, NULL);

פונקציות ספריה לתפיסה ולשחרור תמונת מסך (צג המחשב)[עריכה]

לתפיסת מסך[עריכה]

הפונקציה GetDC[עריכה]

כך מוצגת הפונקציה בתוכנית :

;hdcWindow = GetDC(hwnd)

תפקיד הפונקציה : בהינתן חלון להחזיר את החלק הגרפי שלו, כדי לדוגמה, ליצור ממנו תמונת מפת סיביות .

מספר המִשתנה מסוג בעזרתו הפונקציה
1 HWND , משתנה קלט מקבלת מצביע לחלון
2 HDC , משתנה פלט מחזירה מצביע לחלק הגרפי של החלון

הפונקציה GetDCEx[עריכה]

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

לה יש שלושה משתני קלט. האמצעי לא מעניין אותנו, לכן אצלנו הוא מאופס על ידי הקבוע NULL .

המִשתנה האחרון מסוג DWORD (שמשמש כאן לקבלת קבועי ספריה) אומר שהחלון הוא האבא של כל החלונות שיראו בתמונה.

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

 MyHdc = GetDCEx(
      hwnd,NULL,
      DCX_PARENTCLIP|
DCX_EXCLUDERGN);

הפונקציה CreateCompatibleDC[עריכה]

כך מוצגת הפונקציה בתוכנית :

;hdcMemory = CreateCompatibleDC(hdc)

תפקיד הפונקציה ליצור בזיכרון המחשב מצביע לחלק הגרפי של החלון

התואם מצביע לתמונת חלון, כך שהמתכנת יוכל לעבד בזיכרון את תמונת החלון,

בלי להפריע לתצוגת החלון.

מספר המִשתנה מסוג בעזרתו הפונקציה
1 HDC מקבלת מצביע לחלק הגרפי של החלון
2 HDC מחזירה מִשתנה התואם את החלק הגרפי של החלון

הפונקציה SelectObject[עריכה]

כך מוצגת הפונקציה בתוכנית :

;SelectObject(hdcMemory, hbmMain)

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

הפונקציה GetObject[עריכה]

כך מוצגת הפונקציה בתוכנית :

;GetObject(hdcMemory, sizeof(BITMAP), &b)

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

לשחרור הזיכרון[עריכה]

הפונקציה DeleteDC[עריכה]

כך מוצגת הפונקציה בתוכנית :

;DeleteDC(hdcMemory)

תפקידה לשחרר את זיכרון המחשב שהוקצה למצביע לחלק הגרפי של החלון.

הפונקציה ReleaseDC[עריכה]

כך מוצגת הפונקציה בתוכנית :

;ReleaseDC(hwnd,MyHdc)

תפקידה לשחרר חלון ממצביע לחלק הגרפי שלו .

פונקציות לטיפול בקבצים[עריכה]

הפונקציות מיובאות מקובץ הספרייה "stdio.h" שמשמעותו : קלט - פלט סטנדרטי .

הפונקציה fopen[עריכה]

פונקציה לפתיחת או יצירת קובץ חדש , אם הקובץ לא קיים. אם קיים קובץ בשם הזה , הקובץ הקודם נהרס .

המִשתנה מסוג הסבר הסוג תפקיד
קלט 1 const char* מחרוזת תווים קבועה שם הקובץ
קלט 2 const char* מחרוזת תווים קבועה סוג הפעולה, "w" מסמל ריקון והתחלת כתיבה.
המוחזר FILE* מצביע לקובץ אם לא נפתח קובץ מוחזר ערך השווה ל- 0 .

כך מוצגת הפונקציה בתוכנית :

;fp = fopen(ColorFile,"w")

הפונקציה fclose[עריכה]

סוגרת את הקובץ . היא מקבלת כקלט את המצביע לקובץ . כך מוצגת הפונקציה בתוכנית :

;if(fp) fclose(fp)

משמעות השורה : אם יש ערך למצביע לקובץ (כלומר הקובץ קיים ופתוח ) סגור את הקובץ.

הפונקציה fprintf[עריכה]

פונקציה לכתיבה בקובץ , השם שלה מורכב מ - print שמשמעותו הדפס, ושני - f בהתחלה ובסוף.

כנראה f מסמן קובץ , ואז משמעות הפקודה כך : פתח קובץ (התחילית)והדפס לתוכו (הסופית)

כך מוצגת הפונקציה בתוכנית :

;fprintf(fp," red %3d green %3d blue %3d", r, g, b)

לפונקציה יכולות להיות בלי סוף משתני קלט במקרה שלנו כשכותבים בקובץ 3 מספרים

בפונקציה יש 5 משתנים , המופרדים זה מזה בפסיקים :

מספרו מסוג הסבר הסוג הסבר נוסף
1 FILE* מצביע לקובץ הקובץ בו כותבים
2 מחרוזת תווים קבועה רשימה שעל פיה נכתבים המשתנים red ייכתב בקובץ , % עבור צורת התצוגה ,3d לשם מספר שלם בעל 3 ספרות
3 int - מספר שלם התחום של 4 ספרות בבסיס 16 אצלנו r מסמל את כמות הצבע האדום
4 int - מספר שלם התחום שלו מתחיל בערך ב - (10,0000-) ומסתיים ב - 10,000 אצלנו g מסמל את כמות הצבע הירוק
5 int - מספר שלם אצלנו משתמשים לצבעים בתחום חלקי שלו בין 0 עד 256 אצלנו b מסמל את כמות הצבע הכחול