Kezdőoldal » Számítástechnika » Programozás » Írtam egy progit C#-ban de...

Írtam egy progit C#-ban de nem egészen úgy működik ahogy szeretném lassú hogy lehetne orvosolni a problémát?

Figyelt kérdés

szóval van egy picturebox x=500, y=500 és egy egybeágyazott for ciklussal minden pixelen végigmegy és random szerint feltölti feketével vagy fehérrel ez egy gombnyomásra tökéletesen működött de amikor beleraktam egy Timer-be akkor

ott amikor az Interval 200-ra volt állítva nem cserélte olyan gyorsan a képet hanem kb 1.5sec-et kellett várni a project lényege az volt,hogy a picturebox olyan hatást keltsen mint a régi TV amikor nincs adás olyan hangyásat de ez így nem működik mivel lehetne ezt orvosolni?


2016. júl. 6. 23:47
1 2
 1/12 anonim ***** válasza:

Hát jól kéne megírni.

Nem tudom milyen timerről meg intervalról van szó.

2016. júl. 7. 08:04
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:
Esetleg ha nyitnál még egy szálat a Threaddel?
2016. júl. 7. 09:16
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:
Kod nelkul nem tudunk vilagot megvaltani
2016. júl. 7. 10:39
Hasznos számodra ez a válasz?
 4/12 SimkoL ***** válasza:

Valamily okból kifolyólag a gépem útálja a C#-ot és nem hajlandó fordítani grafikus dolgokat. Delphi-ben megírtam neked pár sor az egész, remélem megérted: [link]


A forráskód, kommentekkel:


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls;


type

TForm1 = class(TForm)

Image1: TImage;

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

tmp_bmp : TBitmap;

{ Public declarations }

end;


var

Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);

begin

// Létrehozzuk a temp bitmap-et és beállítjuk a méretét

tmp_bmp := TBitmap.Create;

with tmp_bmp do

begin

Width := 500;

Height := 500;

// Nem állítjuk nagyra a felbontást, hogy ne sok helyet foglaljon

PixelFormat := pf4bit;

end;

Randomize;

// A villódzás elkerülése miatt

DoubleBuffered := True;

// Maximum 40, hogy a 25 képkocka meglegyen másodpercenként

Timer1.Interval := 30;

end;


procedure TForm1.Timer1Timer(Sender: TObject);

var i, j : Integer;

begin

// Feketére töröljük a vásznat

with tmp_bmp.Canvas do

begin

Pen.Color := clBlack;

Brush.color := clBlack;

Rectangle(0, 0, 499, 499);

end;

// Véletlenszerűen fehér pixeleket rakunk ki

for i := 0 to 499 do

// Soronként most 26-ot

for j := 0 to 25 do

tmp_bmp.Canvas.Pixels[i, Random(500)] := clWhite;

// a temp képet társítjuk a képünkhöz

Image1.Picture.Assign(tmp_bmp);

end;


end.


Nem igényel magyarázatot.

2016. júl. 7. 11:27
Hasznos számodra ez a válasz?
 5/12 SimkoL ***** válasza:
Talán magyarázatként csak annyit, hogy a közvetlen rajzolás nagyon időigényes feladat. Ezért készül mindig a következő kép vizuális megjelenítés nélkül egy Bitmap-re és cserélődik ki az előzővel.
2016. júl. 7. 11:35
Hasznos számodra ez a válasz?
 6/12 anonim ***** válasza:

"és egy egybeágyazott for ciklussal minden pixelen végigmegy"

Ez a gond, így az adott intervallumonként lefutó programkód futási ideje ( [link] ) exponenciális (O(n^2)).


A megoldás az egyszerűsítésben rejlik: időnként kisebb mennyiségű - ennek számosságát ki kell tapasztalni - véletlen pozíciójú képpont színét kell lecserélni feketéről fehérre és vice versa.

2016. júl. 7. 12:19
Hasznos számodra ez a válasz?
 7/12 anonim ***** válasza:
n^2 négyzetes futási idő, nem exponenciális.
2016. júl. 7. 12:31
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:
Igen, mea culpa, elírtam.
2016. júl. 7. 12:42
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:

Javascriptben, <canvas> segítségével egy példa:

[link]

2016. júl. 7. 15:28
Hasznos számodra ez a válasz?
 10/12 SimkoL ***** válasza:
#9: :)
2016. júl. 7. 18:35
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!