Novo

Forum kao aplikacija na telefonu

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

  • 35 odgovora
  • 9.631 pregleda

Najnovija ↓

Re: Kako da izvucem sliku iz picture boxa u fajl? 06.04.2006. u 20:53 · pre 250 meseci #21
Uh. Pod pretpostavkom da su ti dimenzije Bitmap objekata odgovarajuce:
Code:

pbRadniProstor.Image=MyBitmap
Gprahics MyGraph = Graphics.FromImage(MyBitmap)


Sad taj MyGraph koristi za crtanje, a MyBitmap.Save() za snimanje fajla.

Ponavljam, nisam gledao detaljno kod za crtanje, ako je tacno ono sto kaze mmix (a ja mu verujem) dzaba ti.
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: Kako da izvucem sliku iz picture boxa u fajl? 06.04.2006. u 21:00 · pre 250 meseci
izmenjeno 1 put, poslednji put dusans 06.04.2006. u 21:02
  1. dusans06.04.2006. u 21:02zapis iz teksta poruke
#22
Ako je tako onda ti lepo deklariši promenljivu za bitmap:
Code:

private Bitmap Bmp;


Zatim, u form load stavi ovaj kod:
Code:

this.Bmp=new Bitmap(this.pbRadniProstor.Width, this.pbRadniProstor.Height);


U paint eventu ovaj:
Code:

Graphics G = Graphics.FromImage(Bmp);
G.Clear(Color.Transparent);
// Dalje koristi za crtanje G umesto e.Graphics
// Npr. e.Graphics.DrawLine(SivaLinija, Brojac, 0, Brojac, pbRadniProstor.Height); 
// treba da bude G.DrawLine(SivaLinija, Brojac, 0, Brojac, pbRadniProstor.Height);

// Na kraju paint event-a ide ovaj kod da bi video u picture box-u ono što si upravo iscrtao
e.Graphics.DrawImageUnscaled(this.Bmp, 0, 0);


Kasnije snimanje je posle valjda jasno:
Code:

this.Bmp.Save(@"C:\Test.Bmp");


Pozdrav!

[Sad vidim da je Shadowed rekao istu stvar]
Re: Kako da izvucem sliku iz picture boxa u fajl? 06.04.2006. u 21:14 · pre 250 meseci #24
Hmmm cudno. Program je znatno sporiji iako usage procesora ne prelazi preko 50%. Ne bih sad da cepidlacim ali sto je veca slika tj njene dimenzije to radi sporije... jel to zbog

Code:

Graphics G = Graphics.FromImage(slika);


...?
Potpis
SLIder.
Re: Kako da izvucem sliku iz picture boxa u fajl? 06.04.2006. u 21:19 · pre 250 meseci #25
Sporina dolazi iz ove linije ako je ti je PictureBox velik
Code:

e.Graphics.DrawImageUnscaled(this.Bmp, 0, 0);


Sad ako ne moraš da radiš iscrtavanje baš u Paint Event-u nego recimo na učitavanju forme ili na klik dugmeta onda možeš da dodaš u load event-u forme i liniju
Code:

pbRadniProstor.Image = Bmp;

A zatim tamo gde radiš iscrtavanje (ali nikako u PaintEventu) pozoveš sledeću liniju:
Code:

pbRadniProstor.Refresh();

Ovo će ti raditi dosta brže.

Pozdrav!
Re: Kako da izvucem sliku iz picture boxa u fajl? 06.04.2006. u 21:21 · pre 250 meseci #26
Ne znam kako radi - ali nisam ni stavio tu liniju... I bez nje se iscrtava... A kada je stavim onda je jos sporije ;).
Potpis
SLIder.
Re: Kako da izvucem sliku iz picture boxa u fajl? 06.04.2006. u 21:23 · pre 250 meseci #27
Ah - naravno, pa ja sam u timeru od 50 ms radio refresh... Zato se i ispisuje ;).
Cek da probam tvoju varijantu.
Potpis
SLIder.
Re: Kako da izvucem sliku iz picture boxa u fajl? 06.04.2006. u 21:25 · pre 250 meseci #28
Tvoja varijanta : e.Graphics.DrawImageUnscaled(this.Bmp, 0, 0); mi uopste ne iscrtava na ekran :|. Oh well ako mora da bude sporo, sta da radim...
Potpis
SLIder.
Re: Kako da izvucem sliku iz picture boxa u fajl? 07.04.2006. u 11:37 · pre 250 meseci
izmenjeno 1 put, poslednji put negyxo 07.04.2006. u 11:48
  1. negyxo07.04.2006. u 11:48zapis iz teksta poruke
#29
Citat:

Oh well ako mora da bude sporo, sta da radim...


Ne mora da ide sporo. mmix ti je vec sve odgovorio. Treba samo da prebacis iscrtavanje u memory HDC a ne od kontrole. To ces uraditi tako sto ces kreirati prvo "kompatibilan" HDC na osnovu postojeceg a zatim sva ta iscrtavanja raditi na njemu a ne od kontrole. Na kraju na paint event samo uradis jedan BitBlt iz memory HDC u kontrolin HDC. Ovo je sigurno brze, valda :)

Evo zakacio sam mali primer. Vodi racuna samo da je ovo VS2005 projekat.
Re: Kako da izvucem sliku iz picture boxa u fajl? 07.04.2006. u 14:24 · pre 250 meseci #31
Hm... Jeste nekih 20 % brze ali je i dalje veoma sporo... Verovatno je to zbog samog crtanja, koje je jako glomazno i desava svaki frame.
Potpis
SLIder.
Re: Kako da izvucem sliku iz picture boxa u fajl? 07.04.2006. u 14:29 · pre 250 meseci #32
Citat:
Yu Raider: Hmmm cudno. Program je znatno sporiji iako usage procesora ne prelazi preko 50%.


Ako imas P4 HT (Hyper Threading) ili jaci multi-core procesor onda ti single-thread aplikacija nikad nece uzeti vise od 50% ukupnog CPU vremena.
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: Kako da izvucem sliku iz picture boxa u fajl? 07.04.2006. u 14:38 · pre 250 meseci #34
Citat:
Yu Raider: Hm... Jeste nekih 20 % brze ali je i dalje veoma sporo... Verovatno je to zbog samog crtanja, koje je jako glomazno i desava svaki frame.


Jel ti to pravis neku GDI+ igricu? :) Ako pravis animaciju i hoces da bude glatka, onda je mozda pametnije da razmislis o 2D DirectX-u, narocito sto sad postoji .NET podrska. Taj DirectX.NET je spor stravicno kad su u pitanju prave 3D igirce, ali mislim da je vise nego brz za tvoje potrebe. GDI+ jednostavno nije predvidjen za takve stvari.





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: Kako da izvucem sliku iz picture boxa u fajl? 07.04.2006. u 14:43 · pre 250 meseci #35
Ne - nije igra. Nego Flowchart maker. :) ( http://en.wikipedia.org/wiki/Flowchart ) Radi zadovoljavajuce brzo kada ne iscrtavam mrezu,
koja treba da pokrije ceo radni prostor, ali kada treba mrezu da iscrtavam UZAS. Tad mi i strelica secka :).

Inace kod koji koristim za crtanje mreze pri svakom Paint eventu je:

Code:

            for (Brojac = 0; Brojac < pbRadniProstor.Height; Brojac += VertikalnaRazdaljina)
            {
                grafika.DrawLine(SivaLinija, 0, Brojac, pbRadniProstor.Width, Brojac);
            }

            for (Brojac = 0; Brojac < pbRadniProstor.Width; Brojac += HorizontalnaRazdaljina)
            {
                grafika.DrawLine(SivaLinija, Brojac, 0, Brojac, pbRadniProstor.Height);
            }
Potpis
SLIder.
Re: Kako da izvucem sliku iz picture boxa u fajl? 07.04.2006. u 17:19 · pre 250 meseci #36
Pa jer bas moras na paint event da iscrtavas sve linije? Ako ti je ta mreza staticna zasto je onda ne nacrtas u memoriji pa je posle stalno samo kopiras. Na taj nacin ces i izbeci bespotrebno ponavljanje koje ti inace i usporava.
Ako si skinuo onaj primer probaj da zamenis DrawSomething f-ju sa ovim

Code:

int xDis = 5;
            int yDis = 5;
            
            Random rnd = new Random();
            Color c = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));

            Graphics g = Graphics.FromHdc(memHdc);
            g.Clear(Color.White);
            
            Pen p = new Pen(c);

            for (int i = 0; i < 10; i++)
            {
                for (int x = 0; x < pictureBox1.Width; x += xDis)
                {
                    g.DrawLine(p, x, 0, x, pictureBox1.Height);
                }

                for (int y = 0; y < pictureBox1.Height; y += yDis)
                {
                    g.DrawLine(p, 0, y, pictureBox1.Width, y);
                }
            }


Ovako ce ti se DrawSomething iscrtati grid samo jednom u memoriji i posle toga na paint eventu ostaje samo da se kopira taj sadrzaj u pictureBox. Ovako imas samo jedan BitBlt naspram n poziva DrawLine.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme