Írtam egy progit C#-ban de nem egészen úgy működik ahogy szeretném lassú hogy lehetne orvosolni a problémát?
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?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Hát jól kéne megírni.
Nem tudom milyen timerről meg intervalról van szó.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
"é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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Javascriptben, <canvas> segítségével egy példa:
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!