Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 3.688 pregleda

Najnovija ↓

C# crtanje kontinuirane linije 28.12.2007. u 19:57 · pre 229 meseci #1
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)
Re: C# crtanje kontinuirane linije 28.12.2007. u 20:51 · pre 229 meseci #2
Imas negde bottleneck u procesiranju mouse move eventa, daj kod...
Potpis
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ć
Re: C# crtanje kontinuirane linije 28.12.2007. u 21:04 · pre 229 meseci #3
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
Re: C# crtanje kontinuirane linije 28.12.2007. u 21:20 · pre 229 meseci #4
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.
Re: C# crtanje kontinuirane linije 29.12.2007. u 01:56 · pre 229 meseci #6
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".
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: C# crtanje kontinuirane linije 29.12.2007. u 13:38 · pre 229 meseci #8
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();
        }
    }
}
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme