Anonymní profil Patrik Skoupý – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Patrik Skoupý – Programujte.comAnonymní profil Patrik Skoupý – Programujte.com

 

Příspěvky odeslané z IP adresy 95.102.83.–

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
18. 1. 2010   #122839

To liborb :
ja porovnavam kazdy osmy bajt to znamena kazdy druhy pixel ale vnom iba jeden bajt.. a kazdy osmy riadok ale ak to zmenim trebars tak ze bude porovnavat 2x viac bajtob alebo 2x menej bajtov vytazenost procesora je furt rovnaka.. a aj sa mi meni aktivne velkost ukladanej bitmapy ale v tom to neni.. problem je v tom ze staci raz vyvolat pri novej bitmape funkciu scanline a vtedy ta vytazenost stupne.. potom uz nezalezi na tom kolko krat tu funkciu volam... procesor uz mi to nezere.. az ked bitmapu zmenim (novy screenshot) a znovu vyvolam funkciu scanline... keby som mal proceduru ktoru vyvolavam 20x za sekundu a bola by v nej iba nova bitmapa a 1x funkcia scanline vytazovalo by mi to procesor tak isto ako teras..

a ktej druhej veci.. Delphi je asi jedina vec v ktorej viem robit.. pretoze je tam jazyk pascal.. ja pouzivam delphi 7 ale teras som si neni isty ci delphi 2009 je produktom borland.. ten som mal tiez ale vobec som to nepouzival ... delphi 7 je o dost prehladnejsi.

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
17. 1. 2010   #122789

kod som trosku pozmenil ale ziadna zmena furt..

function tform1.porovnaj(var bitm1,bitm2:TBitmap):boolean;
var i,j:integer;
bt1,bt2:^byte;
begin
result:=false;
for j:=1 to (r.Bottom div 8)-1 do
begin
bt1:=bitm1.ScanLine[j*8];
bt2:=bitm2.ScanLine[j*8];

for i:=1 to (r.Right div 2) do
begin
inc(bt1,8);
inc(bt2,8);
if bt1^ <> bt2^ then exit;
end;
end;
result:=true;
end;

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
17. 1. 2010   #122788

no a mimochodom ak funkciu volam asi tak 10 x za sec ..co je o polovicu menej krat.. tak sa aj vytazenost procesora znizi na 6 percent.. co je vlastne pochopitelne... .. ale nic ine v tom programe mi procesor nezere pretoze ak som funkciu odfiltroval tak program zral 0% proc... (podotikam ze program je novy skusobny nejedna sa o povodny program ktory mam na prenos screenshotov) pripada mi to celkom divne ..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
17. 1. 2010   #122787

To Patrik Skoupý :
no vytvoril som takuto porovnavaciu funkciu

function tform1.porovnaj(var bitm1,bitm2:TBitmap):boolean;
var i,j:integer;
bt1,bt2:^byte;
begin
result:=true;
for j:=1 to (r.Bottom div 8)-1 do
begin
bt1:=bitm1.ScanLine[j*8];
bt2:=bitm2.ScanLine[j*8];

for i:=1 to (r.Right div 2) do
begin
inc(bt1,8);
inc(bt2,8);
if bt1^ <> bt2^ then result:=false;
end;
end;
end;

no a nastal dalsi problem.. tuto funkciu vyvolavam asi tak 20 x za sec .. a pri asi prvom vyvolani mi procesor vystupi na otrasnych 46 percent na niekolko sekund asi 10 potom klesne na asi 12 percent.. no v hentom pripade je skenovany kazdy osmy riadok a v tom riadku kazdy ôsmy Byte.. nuz ide o to ze ak tie atributy zmenim trebars tak ze bude skenovany len kazdy druhy riadok ..pricom sa pocet porovnavani zostvornasobi ale . vytazenost procesora je furt okolo 12 percent... iba v provom volani tejto funkcie ked je nejako 46 percent tak netrva 10 sec ale dlhsie .. v com je problem?

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122783

To TooM7 : aaaa funguje.. vdaka..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122781

To KIIV : no skusal som ale nefunguje mi to na premennu typu pointer.. iba na tie co mam typu byte alebo proste typovy nejakz pointer.... zrejme by fungovalo nieco ako ked zadefinujem PByte:^Byte; a potom kod bude takyto PByte:=Pointer; inc(PByte); potom by som vlastne precital z PByte druhy bajt Pointeru.. ale tak ta funkcia inc by tam musela byt dost vela krat aby som proste presiel cely obrazok tak ze budem porovnavat kaydy 4 popripade 8 bajt... potom bych tam tu funkciu musel davat 8x v nejakom cikle a tiez by mi procesor pritom nejasal radostou . :D

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122766

To KIIV : to mi taktiez nefunguje...

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122760

To KIIV :
skusal som ale nefunguje to, v delphi je to zrejme nejak inak.

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122758

skusal som ale nefunguje to, v delphi je to zrejme nejak inak..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122749

To KIIV :
inak ak chcem porovnavat trebars kazdy 4 bajt v tom pointri scanline ako mam trebars do premenej typu byte dostat stvrty bajt z pointru? viem ze ak chcem dostat prvy tak pouzijem nieco take ze ziskanybajt:=byte(pointer^); ale ako ziskat dalsie? trebars stvrty osmy , dvanasty atd atd... este ma v tomto trosku nakopnite pls..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122736

To KIIV :
no na to aby som tomu algoritmu rozumel zrejme este niesom dostatocne daleko v znalosti delphi.. a ako som vravel nerad by som daval do svojho programu kody ktore neviem ako pracuju.. mimochodom .. skusal som porovnanie bitmap tak ze som porovnaval farbu jednotlivych pixelov...(canvas.pix[x,y]) ale pri obrazku 100x100 a volani tej funkcie asi 20 x za sekundu mi to procesor vytazovalo na 43 percent a .. je tu fakt ze pri porovnavani obrazkov z fullscreenu co je dost vysoke rozlisenie optimalnu hodnotu vytazenia procesoru by som mal mozno len vtedy tebz som porovnaval kazdy 100 pixel a to uz by bola docela blbost robit.. to uz je fakt realnejsie nacitat to jpg do streamu a potom len porovnat velkost (stream.size) ..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122734

To KIIV :
a nieje v delphi nejaka uz zabudovana funkcia hashu? trebars ze tam hodim tu bitmapu a vypluje nejake cislo alebo nejaky kod alebo nieco tak ak som tomu teda spravne pochopil.. pretoze nechcem tam vkladat dlhy kod tej funkcie trebars co je vyssie napisana ked jej nerozumiem..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122732

k celemu obrazku naraz sa dostanem.. .. a co je to ten hash? ja nemam ani v najmensom ponatia co to je.. :D ako by som ho mal pouzit? mozte mi napisat nejaku jednoduchu ukazku v kode?

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122730

To Míša :
Keby to bolo tak jednoduche plakal bych od radosti. :D

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122726

ok zistil som ze to handle mam furt rovnake (65556) cize asi zla moznost.. este ma napadlo .. ze trebars odchytavat nejake spravy ktore by prekreslovali okna a podla toho zistil ci mam poslat dalsi screen.. len k tomu neviem ako odchytavat spravy inych aplikacii a aku spravu bych mal asi odchytavat.. zacina sa mi to zbytocne komplikovat.. asi sa na to vybodnem

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122725

k tomu jpg.. provonavam ich velkost... vzdy je ina ak sa obrazok zmeni ale k tomu potrebujem ten obrazok dostat do nejakeho streamu a to hlavne nechcem robit..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122723

To KIIV :
no jo ale tomu algoritmu moc nerozumiem.. napr co je to LSquare alebo ICRC.. no a nebolo by jednoduchsie porovnavat 2 jpg obrazky?? ide tu o to ze robim screeny obrazovky a posielam do aplikacie druheho pocitaca.. cize najprv urobim bitmapu potom z toho jpg a potom to hodim do memorystreamu a preposlem .. aked sa obrazovka nememi aby som neposielal zbytocne screeny.. alebo ako casto sa meni handle obrazovky? (funkcia GetWindowDC(GetDesktopWindow)) to handle sa zmeni len vtedy ak sa nieco na obrazovke prekresli? alebo je handle ine vzdy ked tu funkciu zavolam .. napadlo ma ze by som porovnaval to handle a tak zistil ci mam znovu poslat novy screen alebo ci nie..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
16. 1. 2010   #122719

To KIIV :
na nete som nasiel len toto.... problem je ze tomu moc nerozumiem.. no programovaniu sa venujem vaznejsie len asi tak 4 - 5 mesiacov.. cize mam iste medzery ... nejaky jednoduchsi sposob by nebol?

procedure CalcBitmapCRC32(Bitmap: TBitmap; lCRC: PlArrayCRC);
var i, j, k, l, lSquareHeight, lSquareWidth: Cardinal;
Lines: Array[0..lSquare-1]of Pointer;
begin
if (Bitmap.Height<=0) or (Bitmap.Width<=0) then Exit;
if ((Bitmap.Height mod lSquare)>0) or ((Bitmap.Width mod lSquare)>0) then
Exit;
lSquareHeight:=Bitmap.Height div lSquare;
lSquareWidth:=Bitmap.Width div lSquare;
for i:=0 to (lSquareHeight-1) do // 1 průběh pro každý řádek čtverců.
begin
for j:=0 to (lSquare-1) do
Lines[j]:=Bitmap.ScanLine[i*lSquare+j];
for j:=0 to (lSquareWidth-1) do // 1 průběh pro každý čtverec v 1 řádku.
begin
lCRC^[j,i]:=$FFFFFFFF;
for k:=0 to (lSquare-1) do // 1 průběh pro každý blok dat = 1 řádek
// v 1 čtverci.
for l:=0 to (lSquare-1) do // 1 průběh pro každý pixel v 1 řádku
// 1 čtverce.
lCRC^[j,i]:=UpdateCrc32(Byte(Pointer(
Cardinal(Lines[k])+j*lSquare+l)^),lCRC^[j,i]);
lCRC^[j,i]:=not lCRC^[j,i];
end;
end;
end;

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
15. 1. 2010   #122699

To KIIV :
s pracou s binarnymi datami moc nemam skusenosti.. mozes mi napisat akoby som to mal urobit? popripade aj nejaku ukazku ..

Patrik Skoupý
Delphi › JPEG .. problem s vytazenim…
15. 1. 2010   #122691

Ach tak .. no len mi bolo divne ze samotny prevod z Bitmapy do jpeg prikazom jpeg.assign(bitmap) mi nezral skoro vobec procesor ani vtedy ked menim trebars kvalitu konverzie.. no budem dumat .. vdaka za odpoved..

Patrik Skoupý
Delphi › Ako porovnam 2 BItmapy?
15. 1. 2010   #122690

Mozete mi prosim poradit ako mam porovnat dve bitmapy? aby bol vysledok true alebo false..
Skusal som if Bitmap1 <> Bitmap2 then ..... zrejme je to blbost ja viem necudo ze to nefunguje .. co by som v tom asi mal porovnavat? pls....

Patrik Skoupý
Delphi › Nefunguje skrytí aplikace
14. 1. 2010   #122665

To ha2 : To ha2 : To ha2 :
Ja by som radil skor do unitu aplikacie pred spusteniem pridat prikaz Application.showmainform:=false; zarucene to funtuje mne osobne to funguje a vyhoda je v tom ze nemusis hlavne okno skryvat po zobrazeni prikazom ale okno sa anilen nezobrazi ;)

Patrik Skoupý
Delphi › JPEG .. problem s vytazenim…
14. 1. 2010   #122664

Dobrý den pracujem na jedno programe v delphi v ktorom sa da ovlvadat pocitac v sieti posledne som do nej dodal funkciu sledovanie plochy + ovladanie mysi aj klavesnice.. a plocu vlastne sledujem tak ze vo vzdialenom pocitaci vytvaram screenshoty ktore nasledne preposielam do okna aplikacie v pocitaci odkial sledujem.. problem je v tom ze som to spravil tak aby sa screenshoty davali do formatu jpeg aby boli mensie (na prenos po sieti myslim bmp by trosku trvalo :)) ... no kazdopadne ak ten obrazok nacitam do MemoryStreamu tak mi dost stupne aktivita procesoru... teda pri rozliseni asi 1280x800 je obnovovanie asi 4 obrazky za sekundu. co by nebol taky velky problem keby mi to nevytazovalo procesor na 30 percent. tak isto mi vytazuje procesor v aplikacii ktora tento stream prijme a nacita do komponenty Image. a tam zasa zere prcesor len nacitanie do image.. nie samotna praca so streamom.. no posledne som program vylepsil tak ze ked zmenim rozlisenie okna ktore prijma obrazky tak automaticky odosle spravu aplikacii vo vzdialenom pocitaci o rozliseni ake ma posielat.. z cozo znaci ze cim mensie okno tym vycsie je FPS dosahujem aj 30 ked zmensim okno na 4cm. :D nuz stale je problem ten procesor.. nechcem aby mi proste len monitorovanie plochcy zralo asi tak 30 percent na oboch pocitacoch.. (obydva dvojjadraky okolo do 2 GHz).. tak prosim skuste mi v niecom poradit :) a berte ohlad .. programovaniu sa vaznejsie venunujem len asi tak 4 mesiace ... ;) dakujem za ochotu pomoct novacikovi

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý