DCSIMG
Question from Tapuz .Net Forum: What is GDI? GDI+? WPF? - Justin myJustin = new Justin( Expriences.Current );

Question from Tapuz .Net Forum: What is GDI? GDI+? WPF?

שאלה:

אם אני אתנהג במשך הרבה זמן כאילו אני יודעת מה זה GDI בסוף אני באמת אדע?

 

תשובה:

 

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

+GDI היא טכנולוגיה הדוט נטית והיא מהווה שכבת תקשורת בין אפליקציות דוט נטיות לבין ה-GDI של מערכת ההפעלה. הרעיון מאחורי +GDI הוא "היי, GDI גרוע ואי-אפשר לעשות איתו כלום בלי לדאוג ל-4,000 דברים לא רלוונטים אז בואו נבנה מעליו ממשק שמאפשר באמת לעשות משהו".

העיקר של +GDI הוא אובייקט ה-graphics. אני ממליץ בחום שתפתחי את ה-Intellisense מעל האובייקט הנ"ל ותראי את רשימת המתודות שנמצאת שם. המתודות הנ"ל מייצגות את המשימות ש-+GDI בא לעזור לעשות, וביניהן ציור של צורות רבות (מרובע, משולש, אליפסה, ריבוע, וכך הלאה), מילוי אזור על המסך בצבע מסויים, ציור טקסט (כולל פונט וגודל) על המסך ואפשרות להחזיר את הגודל שלו בפיקסלים לאחר שצוייר וכך הלאה.

בנוסף לזה, יש עוד מספר משימות שמקוטלגות תחת +GDI שהיא בעיקר כל מה שאפשר להגדיר בנפנוף ידיים "כל מה שנראה כמו עבודת נמלים גרפית". למשל לקחת תמונה (בזכרון) ולקבוע לה שפיקסל מסויים הוא בצבע מסויים או להחזיר צבע של פיקסל מסויים בתמונה.

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

הרבה מאוד מהיופי של פקדים חלונאיים קנויים מחברות צד שלישי (syncfusion, infergistics, janus, xceed וכך הלאה) שהן לא משתמשות בציור הברירת מחדל של חלונות ובפועל פשוט מציירים קו-קו ריבוע-ריבוע מהתחלה ויוצרים פקדים מאוד מרשימים גרפית.

הבעיה של +GDI מתגלה בכמה דרכים:

1. זה לצייר קו-קו ריבוע-ריבוע טקסט-טקסט. זאת עבודת נמלים בכל משמעות המילה וכל עבודה מול +GDI מרגישה ככה (מבחינת חוויית תוכניתן) ולכן גוררת אחריה חוויית כתיבה מייסרת וארוכה שגורמת לזמן פיתוח ארוך וחוסר יכולת לדבאג.

2. אין שום התייחסות לאפקטים. ממשקי מחשב (בדומה למציאות) צריכים להיות אינטרקטיבים. תעמדי עם העכבר עכשיו על כפתור חלונאי כלשהו ורוב הסיכויים שהוא יזהר כדי למקד את תשומת הלב שלך שהעמדת את העכבר על כפתור.
+GDI תומך בציור, אבל אין שום התייחסות לאנימציות.

המקרה הפשוט ביותר הוא ציור של מרובע שגדל בגודל שלו בפי שניים תוך חמש שניות (כלומר, מריבוע של 50*50 פיקסל הופך להיות ריבוע של 100*100 פיקסל תוך חמש שניות).
ב-+GDI היינו צריכים לעשות חישובים ולהתחיל להגיד "OK, הוא גודל ב-50 בכל צד במשך 5 שניות, אז ניצור טיימר שכל שנייה מוחק את הריבוע, מעלה איזה פרמטר פנימי שמייצג את הגודל החדש שלו, מצייר אותו מחדש וכל זה בלולאה א-סינכרונית מול התצוגה".

בטכנולוגיה המיקרוסופטית החדשה שמחליפה את Winforms שנקראת WIndows Presentation Framework (או בקצרה, WPF) יש תמיכה הרבה הרבה יותר פשוטה בכל נושא האנימציות והציור (ותמיכה נוספת קלה יותר בנושאים כמו סאונד ווידאו). כמו כן הכלים של WPF הם כלים גרפיים ולא כלים של תוכניתן (הווה אומר, יש איזה כלי שנקרא Expression שהוא בעקרון לוח ציור חכם ולא Visual Studio שהוא כלי כתיבת קוד). ב-WPF היינו מגדירים Animation שרצה במשך חמש שניות ומגדילה את גודל הריבוע שכבר מצוייר.
כלומר, במקום לכתוב קוד מעפן וקשה ב-+GDI שאומר למה התכוונו, אנחנו ב-WPF פשוט נכתוב למה התכוונו.

 

קישור: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp?forum=831&msgid=97985471

Published Tuesday, May 01, 2007 8:48 PM by Justin-Josef Angel [MVP]
תגים:, , ,

Comments

No Comments