PracticU

קבצים - Files - חלק 7

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מתקדם - #Advanced .NET C › קבצים - Files - חלק 7
מילון מושגים:
בינארי - ייצוג מידע בבסיס 2 בעזרת הספרות 0 ו-1. גם קובץ הכולל קוד מכונה ולא טקסט קריא.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
ביט - יחידת המידע הקטנה ביותר במחשב, שערכה 0 או 1. שמונה ביטים מרכיבים בייט.
פיקסל - נקודת הצבע הקטנה ביותר שמרכיבה תמונה או תצוגה על המסך.
הצפנה - המרת מידע לצורה בלתי קריאה בעזרת מפתח, כך שרק מי שמחזיק במפתח המתאים יכול לפענח ולקרוא אותו.
פענוח - המרת מידע מוצפן חזרה לצורתו הקריאה בעזרת המפתח המתאים.

קבצים - Files - חלק 7
בשיעור הזה משתמשים בקריאה וכתיבה בינארית כדי לשמור ולטעון אוסף צורות, ומסבירים בעזרת תמונת BMP איך קובץ בינארי בנוי כשצריך לעבד אותו בבתים.
השלבים העיקריים
1. שמירה בינארית של עיגול: פונקציה בעיגול מקבלת BinaryWriter ושומרת את X, Y והרדיוס. הרדיוס נשמר כ-double, והסדר נקבע לפי הסדר שבו הקורא יקרא אותם.
2. טעינה בינארית: קונסטרקטור נוסף מקבל BinaryReader וקורא את הערכים לפי אותו סדר. הקוד יודע מראש מה כתוב בקובץ, ולכן אין צורך בשורות ובתווים.
3. שמירה וטעינה של אוסף: כמו בקובץ הטקסט, השמירה נעשית עם BinaryWriter אחד לכל האוסף. בתחילת הקובץ נשמר מספר הפריטים, והקורא קורא אותו קודם ומשתמש בו בלולאה.
4. השוואה בין הפורמטים: שמירה וטעינה של אותו אוסף בשני הפורמטים נותנת את אותם ערכים. בדוגמה הקובץ הבינארי גדול מעט יותר, כי כל double תופס שמונה בתים, בעוד שבקובץ טקסט כל ספרה היא בית אחד. ברוב המקרים בינארי יהיה קטן יותר.
5. מיקום הקובץ: שוב נשמר הקובץ בתיקיית קובץ ההרצה ולא בנתיב יחסי, מאותה סיבה כמו בקובץ הטקסט.
6. תמונה בפורמט BMP: קובץ BMP בעומק 24 ביט מתחיל ב-54 בתים של כותרת שמתארת את הפורמט והמידות. אחריהם כל פיקסל נשמר בשלושה בתים: כחול, ירוק ואדום.
7. נגטיב: קוראים את 54 הבתים הראשונים ומעתיקים אותם כמו שהם. אחר כך לכל בית של פיקסל כותבים 255 פחות הערך המקורי. כך מתקבלת התמונה ההפוכה.
בסיום השיעור ברור שכדי לעבד קובץ בינארי צריך להכיר את הפורמט שלו בדיוק, כולל אילו בתים הם כותרת ואילו הם נתונים.
תרגילים
התרגילים בנושא הקבצים כוללים שמירה וטעינה של מספרים, אוסף של אובייקטים עם צבעי קונסולה ומחרוזות, והצפנה ופענוח של קובץ בינארי בעזרת הזזה של כל בית במפתח קבוע.
השיעור הבא בקורס: תרגילים על קבצים - Files

פרקי ההרצאה: קבצים - Files - חלק 7

  1. 00:00

    שמירה וטעינה בינארית ל-Shapes

  2. 01:09

    קריאת ערכים עם BinaryReader

  3. 04:01

    שמירת אוסף לקובץ בינארי

  4. 09:50

    השוואת גודל קובץ טקסט מול בינארי

  5. 17:31

    פורמט תמונה BMP24

  6. 19:46

    מבנה כותרת ופיקסלים ב-BMP

  7. 24:30

    יצירת נגטיב של תמונה

  8. 27:03

    קריאת הכותרת עם ReadBytes

תמלול ההרצאה: קבצים - Files - חלק 7

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

  1. 00:04

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

  2. 00:30

    זה אומר שאנחנו צריכים ללכת ולבנות פונקציות ייעודיות כאלה עבור המחלקה שייפ ועבור המחלקה סרקל אז בואו נוסיף בדיוק פונקציות כאלה בדיוק כמו שהיה לנו סייב טו טקסט פייל בואו נשכפל ונבנה פונקציה סייב טו בינארי פייל היא תקבל בינארי רייטר ותשמור על ידי רייט את x וy אותו הדבר כמו שהיה לנו קונסטרקטור שמקבל סטרים רידר יכול להיות לנו קונסטרקטור

  3. 01:15

    שמקבל בינארי רידר ואנחנו רוצים לקרוא read int 32 ישירות לתוך המשתנים. כי אנחנו יודעים שאם מביאים לנו פוינטר כזה על הקובץ, הוא אמור להכיל בול מידע של שני ערכים אינטג'ריים x ו-y.

  4. 01:42

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

  5. 01:54

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

  6. 02:30

    פייל תשלח לו את הרייטר ואז תשמור גם את הרדיוס הרדיוס מבחינתנו, מה הוא היה? אינטג'ר, פיין, אז זה גם אינטג'ר.

  7. 02:45

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

  8. 03:07

    בצורה כזאת, יש לנו עכשיו בעיגול רדיוס. אחלה. אותו הדבר נבצע עבור הקונסטרקטור. יש לנו פה את הקונסטרקטור שמקבל שלושה ערכים, יש לנו פה את הקונסטרקטור שמקבל את ה-Stream Reader, ואנחנו רוצים לבנות עוד אחד שמקבל Binary Reader, שולח אותו לקונסטרקטור הבסיס,

  9. 03:40

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

  10. 03:58

    והוא זה, העיגול מוכן, ואנחנו יכולים לגשת לקולקשן השייקס שלנו, בדיוק כמו שהיה לנו save to text file ו-read from text file, אנחנו יכולים לשכפל את זה ל-save to binary file ו-read from binary file. בואו נשכפל את שני אלה, נדביק.

  11. 04:19

    קודם כל כדאי שניגש ונקרא למשתנה הזה text file name בכדי שנבצע הבדלה בינו לבין ה-binary file name שאותו אני אפתח פה. ואת הבינארי פייל ניים אנחנו רוצים להגדיר בדיוק כמו שהגדרנו את הטקסט פייל ניים אבל נגיד שהוא מסתיים בבין.

  12. 04:58

    שני הדברים האלה מתבצעים בקונסטרקטור וכעת אנחנו יכולים לגשת לשתי הפונקציות save to binary file ולהגדיר שאנחנו רוצים בינארי פייל ניים, שאנחנו רוצים בינארי רייטר פה ופה ושימו לב שהבינארי רייטר לא מקבל כמו שראינו מקודם זה אומר שאנחנו צריכים לפתוח פייל

  13. 05:32

    סטרים כמו שלמדנו stream to write שווה file.create זה אומר שאם קיים הוא יידרס פה אנחנו רוצים לתת את ה-binary file name ואז אנחנו יכולים להעביר את ה-stream to write דבר ראשון אנחנו רוצים לשמור כמה נקודות יש לנו ולכן כדאי לנו לשמור את אקאונט אז יש לנו רייטר נקודה רייט טאונט לאחר מכן אנחנו רצים על כל סרקל ואומרים לו save to binary file הנה הרייטר

  14. 06:11

    הוא כבר פתוח ומצביע לך על המקום המתאים בקובץ שמור את כל העיגול העיגול ישמור את עצמו ואת האחרים אנחנו עושים dispose לרייטר ואנחנו אנחנו רוצים לעשות dispose לסטרים אוקיי reader פעולה דומה פייל סטרים stream to read שווה פייל נקודה open חייב להיות read

  15. 06:45

    open read אנחנו רוצים להתחבר לבינארי פייל ניין ולהעביר פה לבינארי reader את הבינארי פייל ניין הדבר הראשון אנחנו באים ואומרים רגע בתוך הקובץ אז כאובייקט ראשון יש שם int32 ו-account, כמה ב-account יש.

  16. 07:16

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

  17. 07:41

    ואנחנו רוצים לבוא לפרוגרם ולבדוק את כל הסיפור הזה. console.readline אני לא רוצה בהתחלה. מה שאנחנו רוצים לעשות גם זה לשנות את הפונקציה הזאת read from binary file, את זה שכחתי לעשות, השם שלה binary file, save to binary file, read from binary

  18. 08:11

    file, save to text file ו-read from text file, מעולה. אז בואו ניקח את כל הקוד הזה שיש כאן ונוציא אותו לפונקציה שהתפקיד שלה זה לבדוק את הקונספט של ה-text file ונשכפל אותה פונקציה שבודקת את הקונספט של הבינארי פייל, טסט בינארי פייל בצורה כזאת, ואנחנו רוצים לראות אם

  19. 08:52

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

  20. 09:10

    יש לנו כאן בבדיקה של הבינארי משתנה mycircles 1, בערכים הרנדומליים, הצגה והצגת קו. לאחר מכן אנחנו רוצים to save to binary file, זה מבצע שמירה לקובץ בינארי, פה אנחנו פותחים אוסף אחר, בכדי ממש לבצע את הבדיקה כמו שצריך,

  21. 09:38

    אנחנו אומרים לו read from binary file, ומציגים ורוצים להשוות את ההצגות השונות שקיימות שם. ומה שאני רוצה לעשות זה אני רוצה לקרוא לשתי הפונקציות האלה, יש לנו פה את הטקסט פייל, יש לנו את הבינארי פייל.

  22. 10:00

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

  23. 10:22

    אם כך, בואו טיפה נשנה את זה. נכתוב compare text file and binary file ונעשה את הכל בפונקציה הזאת. יש לנו כאן, נגדיר את זה פה.

  24. 10:46

    זה אפשר להחזיר לפונקציה אם אף אחד לא משתמש בו מחוץ לפונקציה. יש לנו פה את המשתנה myCircles1 שנגדיר אותו כ-OriginalCirclesCollection. אנחנו מתחילים אותו, מציגים אותו, מציגים קו.

  25. 11:19

    שומרים אותו לקובץ בינארי, יש לנו פה אוסף בשביל לטעון אותו, BinaryLoadCollection ולאחר מכן הדפסה. אנחנו רוצים את אותו הדבר לבצע עבור קונספט של הטקסט אז לצורך הדוגמה של הטקסט אנחנו צריכים עוד אוסף כן אנחנו צריכים את זה נשים פה ונגיד לו save to text file אנחנו רוצים אוסף שנקרא text load collection אנחנו רוצים להגיד לו read from text file להדפיס print from text

  26. 12:44

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

  27. 13:25

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

  28. 13:59

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

  29. 14:35

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

  30. 14:49

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

  31. 15:09

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

  32. 15:24

    בואו נסתכל עוד פעם איפה שמרנו אותם. שמרנו אותם בתיקייה של קובץ האקסקיושן ב-Circles Collection TXT, Circle Collections BIN.

  33. 15:35

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

  34. 15:52

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

  35. 16:25

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

  36. 16:43

    הסיבה שהקובץ הטקסטואלי הוא חוסך יותר בזיכרון בגלל שהדאבלים שהוצגו לנו הם מספרים שלמים, לדוגמה 240 ו-262, אז בייסיקלי עבור כל דאבל הוצגו כאן 1, 2, 3 תווים והקובץ הבינארי שמר לנו דאבל כ-8 תווים.

  37. 17:07

    זאת אומרת שעבור כל דאבל נשמרו 5 תווים יותר בקובץ הבינארי מאשר בטקסטואלי כי הוא שומר 8 תווים עבור כל דאבל. למה זה כמעט אותו הדבר? בגלל שבקובץ הטקסטואלי נשמרו לי אנטרים ו-enter זה גם שני תווים לכל אחד.

  38. 17:24

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

  39. 17:52

    מה הכוונה? בואו נסגור פה את התוכנית הזאת, נסגור כאן את התיקייה הזאת, ניגש לתיקיות שיש לנו ונסתכל רגע על תיקיית C ועל התמונות שיש בה.

  40. 18:07

    ומה שיצרתי פה לפני זה, זה יצרתי איזשהו קובץ, אתם רואים את האפל הזה, שהוא תמונה. והאפל המקורי היה לי בפורמט JPEG.

  41. 18:19

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

  42. 18:35

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

  43. 18:51

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

  44. 19:03

    בי.אם.פי זה פורמט שאומר כל פיקסל הולך להישמר בנפרד ויש כל מיני פורמטים של בי.אם.פי ופה אני רואה פורמט מעניין שנקרא בי.אם.פי 24 ביט.

  45. 19:19

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

  46. 19:37

    איזה פורמט יש לו, אז אני במקרה מכיר את הפורמט של bmp24-bit ובואו נצייר את הפורמט הזה. הפורמט של הקובץ אומר כזה דבר, אם כל זה זה הקובץ תמונה שלכם, אז מה שעושים לנו זה שומרים 54 בתים ראשונים, 54 בתים ראשונים, בוא נניח ש-54 בתים זה זה, 54 בתים ראשונים, ה-54 בתים האלה, אני ארשום פה 54 בייטס,

  47. 20:20

    ה-54 בתים האלה, הראשונים של הקובץ, מתארים גם את המימדים של הקובץ וגם את הפורמט שהוא BMP24. אבל מהבית ה-55 והלאה הוא כבר מתחיל לשמור לנו את הבתים עצמם בפורמט מעניין שכל שלושה בתים שנשמרים בקובץ, שלושה בתים. בואו ניקח בית ראשון, ניקח בית שני וניקח בית שלישי.

  48. 20:56

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

  49. 21:32

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

  50. 21:46

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

  51. 22:06

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

  52. 22:19

    והפיקסלים, למה הם מחולקים לשלושה? מפני שכל פיקסל זה בעצם שלוש מנורות שמצביעות על רושם, יוצרות צבע אחד. ושלושת המנורות האלה של הפיקסל אפשר להתייחס אליהם כשלוש מנורות, זה בעצם שלושת הגוונים Red, Green, Blue.

  53. 22:41

    לכן בעזרת שלושה גוונים Red, Green, Blue אנחנו יכולים לייצר צבע ספציפי אחד עבור פיקסל אחד.

  54. 22:47

    זאת הסיבה ש-BMP 24-Bit מחזיק לנו שלושה בתים עבור פיקסל אחד. אם בית הוא שמונה בתים, שלושה בתים זה 24 בתים ולכן זה נקרא BMP 24-Bit.

  55. 22:59

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

  56. 23:19

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

  57. 23:50

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

  58. 24:12

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

  59. 24:21

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

  60. 24:38

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

  61. 24:49

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

  62. 25:05

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

  63. 25:35

    אנחנו רוצים לפתוח בינארי רידר על סטרים טו ריד. אותו הדבר אנחנו רוצים לפתוח פייל סטרים סטרים טו רייט.

  64. 26:00

    פה אנחנו רוצים ליצור אנחנו רוצים ליצור קובץ אחר. בוא נניח באותה התיקייה אבל הוא נקרא negative-apple.bmp נקרא לו בצורה כזאת או ליתר דיוק apple-negative שהם יהיו side by side אחד ליד השני ויש לנו פה צורך בבינארי writer שמקבל stream to write סגירות writer close stream to write

  65. 26:44

    close בעצם אנחנו השתמשנו עם dispose אז בואו נישאר עם מהדיספוז, במקרה הזה אין לזה הבדל, רידר דיספוז, טרים טו ריד, דיספוז, מעולה.

  66. 27:11

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

  67. 27:39

    אותו הדבר כלומר רוחב והגובה של הקובץ אז מה שאנחנו רוצים לעשות זה קודם כל לקרוא את ה-54 הבתים הראשונים ולשמור אותם בקובץ של הנגטיב כמו שהם אז אם אנחנו הולכים ל-reader אנחנו רואים שיש לנו פה readbytes readbytes אומרת לנו תגידו לי כמה בתים אתם רוצים לקרוא 54 אחלה אז בואו תגדירו לי פה מערך בתים first 54 bytes ואני אתן לכם אותם.

לקורס המלא: קורס תכנות מתקדם ב‑#C ודוט-נט

ההרצאה הקודמת: קבצים - Files - חלק 6

ההרצאה הבאה: תרגילים על קבצים - Files

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

  • קבצים - files
  • Text Files
  • files ownership
  • עבודה עם קבצים ב-Xcode - חלק 1

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

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס WCF - תקשורת למתקדמים בדוט-נט