[ milnen @ 22.09.2007. 07:31 ] @
| Koji je najbrzi nacin za prebacivanje vrednosti pixela iz jedne vrste neke slike u niz?
Probao sam
Code: procedure TForm1.Button1Click(Sender: TObject);
Var i,Row : Integer;
a : Array of Integer;
begin
Row:=0;
SetLength(a,Image1.Width);
For i:=0 To Image1.Width-1 do a[i]:=Image1.Canvas.Pixels[i,Row];
end;
ali je prilicno sporo. |
[ [KS] @ 22.09.2007. 10:29 ] @
Image1.Canvas.Pixels ti je niz sam po sebi...
[ savkic @ 22.09.2007. 10:56 ] @
> Koji je najbrzi nacin za prebacivanje vrednosti pixela iz jedne vrste neke slike u niz?
Kako ti trebaju pikseli koji nisu u kontinualnom nizu, moraš uzimati jedan po jedan. Pixels tj. GetPixel nije brzo rešenje jer koristi WinApi funkciju. Najbolje što možeš uraditi je da dođeš do direktne bmp memorije i da uzimaš piksele. Za direktan pristup memoriji možeš koristiti TJclBitmap32 a možda može i TGraphic32.
[ milnen @ 22.09.2007. 14:12 ] @
@savkic
Probacu nesto sa tvojim predlogom.
Ajde da kazem sta sve radim, mozda moze nesto bolje da se uradi. Radim nesto sa velikim bitmapama (recimo 20000x25000), koje se u delovima nalaze na hard disku. To su skenirane geografske karte na kojima nesto crtam i na kraju od svega treba da napravim jednu bitmapu na hard disku. Posto su velike, ne mogu da stanu u jednu bitmapu u memoriji, nego svaki deo nezavisno obradjujem i na na kraju sve to snimim u jedan bmp fajl. Kreiram header, a zatim na odgovarajuca mesta upisujem delove ovih bitmapa iz memorije. E sad, da bi ih upisao, treba da konverujem BGR pixele iz memorije u ARGB format i da snimim na hard disk. To radim tako sto pixele ubacim u niz, uz konverziju BGR->ARGB, pa sa BlockWrite snimim u fajl. Koliko sam mogao da primetim, u celoj operaciji snimanja na hard disk, najsporije je prebacivanje pixela u niz, jer se ne dobije znacajno ubrzanje ako povecam dimenziju niza koji upisujem.
[ Milan Milosevic @ 22.09.2007. 17:28 ] @
Tu imas dosta dobrih resenja na internetu. Samo potrazi i nacices znacajna ubrzanja. Ja sam nesto skinuo sa
www.About.com
Radeno je u assembleru i algoritam je veoma brz.
[ savkic @ 22.09.2007. 17:44 ] @
Možda da uopšte i ne koristiš komponentu već direktno sa fajlom, učitaš preko memory mapped file i menjaš, brže od toga ne može.
[ milnen @ 22.09.2007. 18:01 ] @
Citat:
Milan Milosevic: Tu imas dosta dobrih resenja na internetu. Samo potrazi i nacices znacajna ubrzanja. Ja sam nesto skinuo sa
www.About.com
Radeno je u assembleru i algoritam je veoma brz.
Gledao sam ovo, ali nisam nasao nesto slicno mom problemu.
Citat:
savkic: Možda da uopšte i ne koristiš komponentu već direktno sa fajlom, učitaš preko memory mapped file i menjaš, brže od toga ne može.
Ali to bi znacilo da menjam fajlove originalne karte? Onda bih morao stalno da pravim kopiju, pa da radim sa njom.
[ dogriz @ 22.09.2007. 20:30 ] @
Ja sam svojevremeno pronašao dosta korisnih stvari oko grafike na
http://www.efg2.com/Lab/Library/Delphi/index.html
[ Jovan Prokopović @ 22.09.2007. 20:39 ] @
Pogledaj u Delphi helpu ScanLine, možda ti pomogne.
[ savkic @ 22.09.2007. 21:49 ] @
> Ali to bi znacilo da menjam fajlove originalne karte? Onda bih morao stalno da pravim kopiju, pa da radim sa njom.
Kažeš da ih menjaš pa snimaš? Ti ih prvo snimi pa menjaj :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.