SaarD פורסם 2007 באפריל 4 Share פורסם 2007 באפריל 4 יצרתי צייר (דומה לשל ווינדוס) אבל אם אני גורר את החלון מחוץ לגבולות המסך אם שם עליו עוד חלון הגרפיקה נמחקת....איך אני מונע את הדבר הזה בצורה הטובה ביותר? קישור לתוכן שתף באתרים אחרים More sharing options...
NJorl פורסם 2007 באפריל 4 Share פורסם 2007 באפריל 4 אתה אמור לעדכן את הציור שלך באירוע Paint של ה- control בתוכו את מצייראני יודע שיש טכניקה כדי לעדכן רק את החלק שהוסתר ע"י חלון אחר ע"מ ליעל את השיפור רק שאני לא זוכר איך זה הולךבמקרה הפחות יעיל פשוט תצייר את כל הציור מחדש את ה- data של הציור אני מניח שאתה שומר באיזשהו Collection שמקבל אובייקטים שמממשים את הממשק של Draw קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 http://www.java2s.com/Code/CSharp/GUI-Windows-Form/ControlPaintForm.htm קישור לתוכן שתף באתרים אחרים More sharing options...
k-o-b-y פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 אפשרות אחרת היא לצייר ל Bitmap כלשהו ולא ישירות לחלון ואז ב event handler של Paint אתה מצייר את ה bitmap לחלון (או רק את החלק שאתה צריך). קישור לתוכן שתף באתרים אחרים More sharing options...
SaarD פורסם 2007 באפריל 5 מחבר Share פורסם 2007 באפריל 5 הצייר שלי בעיקר משתמש במברשות, אז איך בדיוק אני "שומר" על הציור??....לא קיבלתי כאן איזושהי תשובה שמסבירה איך אני שומר על הציור כאשר הוא מוסתר או יוצא מגבולות המסך שלא יימחק קישור לתוכן שתף באתרים אחרים More sharing options...
k-o-b-y פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 קיבלת שני הסברים. אני אפרט קצת יותר.בכל פעם שהחלון צריך לצייר את עצמו מחדש נקרא האירוע Paint של החלון. Windows שולח הודעה לחלון לצייר את עצמו מחדש כשהסמן זז מעליו, כשחלק מהחלון הוסתר ואז "התגלה" מחדש וכו'. לכן הצורות שלך נמחקות - אתה לא מצייר אותן מחדש. אתה צריך להוסיף event handler לאירוע Paint או לדרוס את OnPaint ולצייר שם מחדש את הצורות.דרך אחת שהציע לך NJorl היא לשמור את המידע של כל הצורות שציירת (מיקום, צבע וכו') ואז ב Paint לעבור על כולן ולצייר אותן.אפשרות אחרת, קלה יותר לדעתי, היא לצייר ל Bitmap ולא ישירות למסך ואז ב Paint לצייר את ה bitmap עם DrawImage. אתה שומר Bitmap (כשדה במחלקה) ויוצר אותו במימדים של החלון.כשאתה מצייר את הצורות, אתה יוצר אובייקט Graphics עבור התמונה:Graphics gfx = Graphics.FromImage(this.drawingBmp);ומצייר אליו.באירוע Paint אתה מצייר את התמונה לחלון עם המתודה DrawImage (של Graphics). כדי לייעל את הציור אתה יכול לצייר רק את החלק בחלון שהשתנה. המאפיין ClipRectangle של PaintEventArgs מציין את המלבן שהשתנה. ה Paint שלך יהיה משהו בסגנון של: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { e.Graphics.DrawImage(this.drawingBmp, e.ClipRectangle.X, e.ClipRectangle.Y, e.ClipRectangle, GraphicsUnit.Pixel); }לא הרצתי את הקוד אבל זה הרעיון בגדול. קישור לתוכן שתף באתרים אחרים More sharing options...
NJorl פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 n/a קישור לתוכן שתף באתרים אחרים More sharing options...
SaarD פורסם 2007 באפריל 5 מחבר Share פורסם 2007 באפריל 5 אבל אני לא מחליט מה מצוייר, המשתמש שמצייר מחליט מה לצייר... ולשמור עם קובץ BMP כבר עשיתי אבל אני רוצה לראות אם יש דרך נורמלית יותר, כי לפתוח קובץ סתם לא נראה לי. למרות שתמיד אפשר לשמור אותו ב memory streamאבל איך אני שומר את כל הציור כאילו במשתנה ללא STREAM זאת השאלה קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 אתה יכול לשמור את הצורות שהמשתמש צייר, ולא את התמונה עצמה(משהו כמו PS). קישור לתוכן שתף באתרים אחרים More sharing options...
NJorl פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 בטח שאתה יכול לדעת מה המשתמש מצייר לךהרי יש לך בטח אירועים על עכבר , תפריטי בחירה של צורות מוכנות מראש, וגם ציור חופשי עם העכבר במברשתלכל אלו יש פרמטרים נקודת התחלה, נקודת סיום, צבע , עובי מברשת כל אלו אתה יכול לשמור לתוך אוספים של אובייקטיםדרך אגב על גבי איזה משטח המשתמש מצייר בתכנית שלך , ישר על ה- form או שהקצת איזשהו container יעודי ?נראה לי שיותר נוח לתת למשתמש לצייר על גבי picture box כי יש לך יותר פיצ'רים שימושיים ליישום שלך קישור לתוכן שתף באתרים אחרים More sharing options...
SaarD פורסם 2007 באפריל 5 מחבר Share פורסם 2007 באפריל 5 בטח שאתה יכול לדעת מה המשתמש מצייר לךהרי יש לך בטח אירועים על עכבר , תפריטי בחירה של צורות מוכנות מראש, וגם ציור חופשי עם העכבר במברשתלכל אלו יש פרמטרים נקודת התחלה, נקודת סיום, צבע , עובי מברשת כל אלו אתה יכול לשמור לתוך אוספים של אובייקטיםדרך אגב על גבי איזה משטח המשתמש מצייר בתכנית שלך , ישר על ה- form או שהקצת איזשהו container יעודי ?נראה לי שיותר נוח לתת למשתמש לצייר על גבי picture box כי יש לך יותר פיצ'רים שימושיים ליישום שלךאתה יכול לתת דוגמא איך אני אשמור את כל האובייקטים האלה ??? בשביל לצייר שוב את התמונה.דרך אגב זה רק לאימון שלי לא מוציא את זה לאף אחד.... (לגבי ה PICTURE BOX) ...תודה קישור לתוכן שתף באתרים אחרים More sharing options...
k-o-b-y פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 אתה לא הבנת אותי. כשאמרתי bitmap לא התכוונתי לקובץ, אלא לאובייקט של המחלקה bitmap - תמונה בזכרון. התכוונתי שבמקום לצייר ישר לחלון, אתה מצייר לתמונה בזכרון (ל"אזור בזכרון") ואז מעתיק ממנו אל החלון כשצריך. תקרא קצת את התיעוד ב msdn.מה ש-NJorl הציע לך זה לשמור את הנתונים של כל צורה שהמשתמש מצייר. למשל, אתה יכול להגדיר מחלקה בשם Shape שיש לה את השדות Type, Top, Left, Width, Height, FillColor, PenWidth וכו'. אתה שומר אוסף (List למשל) של אובייקטים מטיפוס Shape שמציינים את הצורות שהמשתמש צייר. כשהמשתמש צייר עיגול למשל, אתה מוסיף לרשימה אובייקט חדש כשהשדה Type מוגדר כ "Circle" ושאר הנתונים על פי מה שהמשתמש צייר. ב Paint אתה עובר על הרשימה ומצייר את כל הצורות. קישור לתוכן שתף באתרים אחרים More sharing options...
NJorl פורסם 2007 באפריל 5 Share פורסם 2007 באפריל 5 או קיי אתגרת אותי, בד"כ אני לא מתעסק בתכנות גרפיקה אבל סתם בשביל הפאןמסתבר שהבעיה שתארת כלל לא מופיעה אצלי , כנראה בשל העובדה שהשתמשתי ב- PictureBox בתור ה- Canvasבדוגמית שכתבתי היישומון מצייר קו מהרגע שאתה לוחץ על העכבר - זז איתו עד שאתה עוזבנסיתי אחה"כ להסתיר את החלון , למזער , הציור נשאר כמו גדולusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace WindowsApplication7{ public partial class Form1 : Form { bool isDrawing = false; private System.Drawing.Graphics g1 = null; private System.Drawing.Pen pen1 = null; private int x0 = -1; private int y0 = -1; public Form1() { InitializeComponent(); g1 = Graphics.FromImage(pictureBox1.Image); pen1 = new Pen(Color.Black, 1); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; x0 = e.X; y0 = e.Y; } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (isDrawing) { g1.DrawLine(pen1, x0, y0, e.X, e.Y); x0 = e.X; y0 = e.Y; pictureBox1.Refresh(); } } }} קישור לתוכן שתף באתרים אחרים More sharing options...
k-o-b-y פורסם 2007 באפריל 6 Share פורסם 2007 באפריל 6 זה באופן עקיף מה שהצעתי (רק שלא חשבתי להשתמש ב PictureBox). אתה מצייר לתמונה של ה PictureBox ולא ישירות לחלון. ה PictureBox מצייר את התמונה מחדש כשצריך. קישור לתוכן שתף באתרים אחרים More sharing options...
NJorl פורסם 2007 באפריל 6 Share פורסם 2007 באפריל 6 ולכן , קבל ביטול לגבי ההצעות שהצעתי קודם לכן , זה היה נכון כנראה לגבי גרסאות של שפות יותר מיושנות כמו java 1.0 או רק אם אתה מתעקש לציירישירות לתוך החלון , אז כמו שאמרתי פשוט תשתמש ב- picture box ותחסוך קוד קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.