אלגוריתמים גרפיים

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

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

מסתבר שהאלגוריתם להעביר צבע ל Gray Scale הוא מאוד מאוד פשוט, אבל אם לא עושים את זה נכון, זה תהליך מאוד איטי סתם. למה אתם בטח שואלים, ובכן האלגוריתם אומר שכל "משתתף" בצבע צריך להחסיר ב127 מהערך שלו, כלומר אם יש לנו 3 משתתפי צבע בשם RGB או Red, Green, Blue אז כל אחד מהם יוחסר ב127. כלומר R פחות 127, G פחות 127 ו B פחות 127.

העניין הוא שאם נעבור נקודה נקודה, והתמונה גדולה מאוד, זה יקח נצח, ולכן יש כל מיני שיטות להתמודד עם זה, כמו מצביע לצבע (גוון) מסויים, וכך במקום לעבור כל נקודה, עוברים כל צבע בתמונה, ואם נגיד יש לי "רק" 80 צבעים בתמונה, אבל היא בגודל 1024×1024, אפשר להבין שמעבר על 80 תאים, מעט מהיר יותר מאשר לעבור על 1,048,576 תאים.

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

עוד אלגוריתם מאוד מעניין, הוא ליצור שקיפות. בעולם המחשבים אין באמת שקיפות, אלא שכפול הרקע של התמונה שיתן הרגשה כאילו יש שקיפות. איך זה נעשה ? ובכן צריך תמונה אחת כפול 2. בתמונה אחת נגרום לה להיות משהו שנקרא מסיכה (mask), שזה אומר שכל מקום בו יש מידע שאנחנו רוצים להציג הוא יהיה בצבע שחור, וכל מקום בו אנחנו רוצים "שקיפות" נשים אותו בצבע לבן (אני משתמש בזיכרון שלי ויכול להיות שהחלפתי את הסדר). על זה נלביש את התמונה המקורית באמצעות פעולת XOR, וככה נציג רק את המידע שנרצה.

יש עוד הרבה מאוד אלגוריתמים שונים ומעניינים שניתן לבצע על צבעים ותמונות. מקום טוב להתחיל בו (שאני לפחות התחלתי בו) הוא האתר של Efg.

אם יש לכם עוד אלגוריתמים מעניינים (בדגש על תיאור יותר מאשר קוד), זה המקום המתאים לפרסם אותם🙂

5 מחשבות על “אלגוריתמים גרפיים

  1. elcuco

    כשכתבתי ספרייה גרפית לדוס (פסקל… כן כן, שתוק, אני יודע מה אתה רוצה להגיד…) עשיתי ממוצע משוקלל בין הצבעים:

    i = (r+g+b)/3;
    r = i; g ;i ; b; i;

    זה עבד לא רע. מישהו יכול להסביר לי מה עשיתי לא טוב..?

  2. elcuco

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

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s