עבור לתוכן

סיבוב של תמונה לפי זווית

Featured Replies

פורסם

שלום,

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

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

אנא הפנו אותי לפעולה כזאת או אם אפשר הציעו לי רעיון כיצד אני יכול לעשות זאת ,

ניסיתי בעצמי אבל משום מה זה לא יוצא טוב.

תודה רבה.

פורסם
  • מחבר

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

http://www.codeproject.com/KB/graphics/rotateimage.aspx

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

אני צריך משהו בסגנון http://www.codeproject.com/KB/graphics/RotatePictureBox.aspx

מאחר והוא יותר פשוט.

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

ניסיתי לעשות זאת אבל זה גם לא עבד...

פורסם

ניסית את התוצאה הראשונה בגוגל?

http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-rotate

היא משתמשת במנגנונים מובנים של דוטנט. אז אלא אם אתה צריך לממש את הסיבוב בעצמך, אני לא רואה סיבה לא להשתמש בדוגמה הנ"ל.

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

פורסם
  • מחבר

היא אכן מסובבת אבל גם חותכת את התמונה...

אולי אתה יודע איך אני יכול לחשב את הגבולות החדשים כך שאני אצור תמונה שלאחר הסיבוב לא תחתך ?

פורסם

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

פורסם

אני מניח שאתה לומד גם מתמטיקה. תחזור על החומר של סינוסים וקוסינוסים.

פורסם

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

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

זה הרבה יותר פשוט ממה שנדמה לך...

פורסם
  • מחבר

ניסיתי לקחת מלבן כלשהוא ולחסום את התמונה שאני רוצה לסובב,

ניסיתי לחשב גבולות חדשים של תמונה כך :

double x, y; x = y = 0;

x = Math.Cos(angle * Math.PI / 180) * image.Width + Math.Sin(angle * Math.PI / 180) * image.Height;

y = Math.Sin(angle * Math.PI / 180) * image.Width + Math.Cos(angle * Math.PI / 180) * image.Height;

אך עדיין ישנה בעיה.

פורסם

זה הולך ככה:

נניח תמונה עם גובה h ורוחב w.

נניח זוית סיבוב קטנה או שווה 45 מעלות (אחרת ניתן לנוון למקרה הזה)

מרכז התמונה הוא ציר הסיבוב לכן הקורדינטה של המרכז תהיה (0,0)

גודל המלבן החוסם התמונה המסובבת נקבע על פי הפינות.

יש לתמונה 4 פינות - אני אתיחס כעת לפינה הימנית העליונה. הקורדינטה שלה היא (w/2,h/2)

נחבר הקורדינטה למרכז ומקבלים ישר באורך c = (w^2+h^2)/4 עם זוית ביטא לציר x (אפשר וצריך לחשב אותה).

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

כעת אתה יכול לחשב לו את הקורדינטות. קורדינטת ה X החדשה היא חצי הרוחב החדש. ההפרש בקורינטדת ה Y החדשה היא ההפרש שצריך להוסיף לגובה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים