Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C# crtanje kontinuirane linije

[es] :: .NET :: .NET Desktop razvoj :: C# crtanje kontinuirane linije

[ Pregleda: 2775 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon C# crtanje kontinuirane linije28.12.2007. u 18:57 - pre 198 meseci
Imam problem sa crtanjem u C#. Crtam na panel kontrolu, i sve je ok dok sporo crtam, no kad radim brže poteze mišom linija nije kontinuirana.
Kako bih to mogao riješiti?
(hvala)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: C# crtanje kontinuirane linije28.12.2007. u 19:51 - pre 198 meseci
Imas negde bottleneck u procesiranju mouse move eventa, daj kod...

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: C# crtanje kontinuirane linije28.12.2007. u 20:04 - pre 198 meseci
Ma mislim da nije štos u tome... al evo

Code:

        public Bitmap crtanje(Bitmap potpisBMP, int X, int Y)
        {
            SolidBrush fill = new SolidBrush(Color.Black);
            Graphics g = Graphics.FromImage(potpisBMP);
            g.FillRectangle(fill, X - 2, Y - 2, 4, 4);
            fill.Dispose();
            g.Dispose();
            return potpisBMP;
        }
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            Bitmap trenutniSadrzaj = new Bitmap(pictureBox1.Image);
            if (e.Button == MouseButtons.Left)
            {
                pictureBox1.Image = crtanje(trenutniSadrzaj, e.X, e.Y);
            }
        }


s tim da je ista stvar dali direktno crtam na kontrolu ili prvo u bitmap pa onda proiciram sve na picturebox, također za pictureBox je uključen doublebuffering
 
Odgovor na temu

Predrag Glumac
Luxembourg

Član broj: 167588
Poruke: 127
*.eunet.yu.



Profil

icon Re: C# crtanje kontinuirane linije28.12.2007. u 20:20 - pre 198 meseci
Nije ti dobar logaritam :P Umesto sto crtas samo jednu tacku (zapravo rectangle) crtaj liniju izmedju prethodne koordinate kurzora i nove koordinate. Bice reckavo, ali ce biti u kontinuitetu.

Drugo, nema potrebe da svaki put pravis novi bitmap, jer je on nasledjen iz Image klase.
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: C# crtanje kontinuirane linije28.12.2007. u 21:12 - pre 198 meseci
Ma opet ista stvar, napravio sam sada kako si rekao, i opet, vidi:

 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12849



+4784 Profil

icon Re: C# crtanje kontinuirane linije29.12.2007. u 00:56 - pre 198 meseci
Prvo, ne valja ti sto u metodu crtanje svaki put kreiras i unistavas Graphics objekat. Napravi jedan na nivou klase i koristi uvek isti. Tek kad znas da ti vise neces crtati (ili bar na neko vreme, detalji zavise od aplikacije), unisti taj objekat.
Drugo, definitivno nisi napravio da crta liniju od prethodne pozicije do nove, vec i dalje crtas tacke. Potrebno je da prilikom jednog povlacenja linije zabelezis koordinate koje si koristio a onda prilikom sledeceg crtas od tih zabelezenih do novih a zatim nove zabelezis na istom mestu - u promenljivima koje su na nivou klase.
Pokusaj to pa javi kako je proslo, ako ne uspes napisacu ti sutra kod, sad je malo kasno :)
Inace, cak i tada, iako ces imati kontinualnu liniju, prilikom brzih pokreta, ona ce biti izlomljena jer postoji odredjen broj pozicija u jedinici vremena koje Windows "hvata".
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: C# crtanje kontinuirane linije29.12.2007. u 10:43 - pre 198 meseci
A kako da pamtim koordinate?
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12849



+4784 Profil

icon Re: C# crtanje kontinuirane linije29.12.2007. u 12:38 - pre 198 meseci
Code:

public partial class Form1 : Form {
    Boolean EditMode = false;
    Bitmap MyBitmap;
    Graphics g;
    Pen MyPen = new Pen(Color.Black, 1);
    int OldX, OldY;
        public Form1() {
        InitializeComponent();
    }
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) {
            EditMode=true;
            OldX=e.X;
            OldY=e.Y;
        }
    }
    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left)
            EditMode=false;
    }
    private void Form1_Load(object sender, EventArgs e) {
        MyBitmap = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);
        g = Graphics.FromImage(this.MyBitmap);
        pictureBox1.Image=MyBitmap;
    }
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) {
        if (EditMode) {
            g.DrawLine(MyPen, OldX, OldY, e.X, e.Y);
            OldX=e.X;
            OldY=e.Y;
            pictureBox1.Refresh();
        }
    }
}

 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: C# crtanje kontinuirane linije29.12.2007. u 12:57 - pre 198 meseci
Woow.. hvala!
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: C# crtanje kontinuirane linije

[ Pregleda: 2775 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.