Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Iscitavanje piksela van aplikacije

[es] :: Pascal / Delphi / Kylix :: Iscitavanje piksela van aplikacije

[ Pregleda: 2473 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ksrele
Programer - informatičar
Gold Drink D.O.O. Subotica
Subotica

Član broj: 14253
Poruke: 1642
*.yunord.net.

ICQ: 66444502


+47 Profil

icon Iscitavanje piksela van aplikacije15.11.2003. u 13:03 - pre 247 meseci
Da li neko ima ideju kako mogu da iscitavam vrednosti odredjenih piksela (7 - 10 komada) sa vidljivog dela ekrana, znaci sve sto se trenutno prikazuje. Mislim da bih trebao da pristupim grafickoj memoriji ali ne znam kako se to radi u windows-u. Treba mi malo veca brzina neki 20 - 30 puta u sekundi.
Ovo naravno treba da radi u Delphiju!
P.S.
Razumem se pomalo u asembler tako da ako trebaju neke ASM procedure nije problem.
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.ptt.yu

ICQ: 47761626


Profil

icon Re: Iscitavanje piksela van aplikacije15.11.2003. u 13:29 - pre 247 meseci
Znas kako bi ja to uradio...

- Ishcitas rezoluciju ekrana
- Napravis jednu providnu formu bez naslova
- na njoj prilepis canvas
- posle toga mozes da pises po njoj

A verovatno postoje i fore preko directXa ali
 
Odgovor na temu

ksrele
Programer - informatičar
Gold Drink D.O.O. Subotica
Subotica

Član broj: 14253
Poruke: 1642
*.yunord.net.

ICQ: 66444502


+47 Profil

icon Re: Iscitavanje piksela van aplikacije15.11.2003. u 16:49 - pre 247 meseci
Cekaj, cekaj sta je canvas?
Pocetnik sam u radu sa Delphijem, radio sam u pascalu i to dosta (tamo nema canvas-a??).
Uspeo sam da iscitam rezoluciu, napravim "full screan" transparentnu formu ali kako da citam vrednosti odredjenih piksela sa nje?
Da preciziram moj probrem: hocu da kontrolisem menjanje boje na odredjenim mestima (koordinatama) na nekoj pokrenutoj aplikaciju (npr. Winamp, TotalCmd itd.)...
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.ptt.yu

ICQ: 47761626


Profil

icon Re: Iscitavanje piksela van aplikacije15.11.2003. u 20:57 - pre 247 meseci
lapsus. Ja sam razumeo iscrtavanje

Ali mislim i da ovo nije mnogo tesko. Otvori u delphiju API help i pretrazuj.
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.ptt.yu

ICQ: 47761626


Profil

icon Re: Iscitavanje piksela van aplikacije15.11.2003. u 21:01 - pre 247 meseci
Windows SDK

ima nesto glReadPixels
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Iscitavanje piksela van aplikacije16.11.2003. u 12:41 - pre 247 meseci
Ili, mada ne znam koliko je ovo brzo, keriras jedan TBitmap u programu, pa pomocu BitBlt naredbe iskopiras ceo ekran u TBitmap promenljivu i posle ispitas osobine nekog pixela.
 
Odgovor na temu

ksrele
Programer - informatičar
Gold Drink D.O.O. Subotica
Subotica

Član broj: 14253
Poruke: 1642
217.194.133.*

ICQ: 66444502


+47 Profil

icon Re: Iscitavanje piksela van aplikacije16.11.2003. u 16:21 - pre 247 meseci
Da li byTer mogao da postujes primer za SDK komandu ne mogu da se snadjem, nasao sam komandu ali mi nije bas jasno kako se koristi.
Sto se tice Tbitmap-a nisam jos pokusao zato sto ne sumnjam da ne radi ali je najverovatnije dosta sporo.
Ako neko ima neku ideju sa direktnim iscitavanjem memorije to bi bilo najbolje...
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.info-net.co.yu

ICQ: 47761626


Profil

icon Re: Iscitavanje piksela van aplikacije16.11.2003. u 20:28 - pre 247 meseci
Pa ne znam ni ja bas najtacnije. Po ovome GL cini mi se da je Glide, a tamo jos nisam zalazio.
Zato probaj sam, trazi Google...
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.120.EUnet.yu



+1 Profil

icon Re: Iscitavanje piksela van aplikacije17.11.2003. u 09:52 - pre 247 meseci
Prvo u private delu forme stavis:

Code:
Bm : TBitmap;


pa onda u event OnCreate forme stavis:

Code:

...
   Bmp := TBitmap.Create;
...


u OnDestroy stavis:

Code:

   Bmp.Free;


stavis ispod implementation dela u unit-u:

Code:

procedure SlikajEkran(Bm : TBitmap);
var
  DC: HDC;
  X, Y: integer;
  SirinaEkrana, VisinaEkrana: integer;
begin
  SirinaEkrana := GetSystemMetrics(sm_CXScreen); // uzimamo sirinu ekrana
  VisinaEkrana := GetSystemMetrics(sm_CYScreen); // uzimamo visinu ekrana

  Bm.Width := ScreenWidth; // podesavamo velicinu bitmape i format
  Bm.Height := ScreenHeight;
  Bm.PixelFormat := pf24bit;

  DC := GetDC(0); // uzimamo potreban handle 
  try
  // radimo kopiranje sa canvas-a ekrana na
  // nasu bitmap-u
  BitBlt(Bm.Canvas.Handle, 0, 0,
         SirinaEkrana, VisinaEkrana, DC, 0, 0, SrcCopy);
  finally
         ReleaseDC(0, DC); // vracamo handle
  end;
end;



stavis TButton na formu i stavis na OnClick:

Code:

begin
    // "Slikamo" ekran
    SlikajEkran(Bmp);
    // Sada radis sa slikom sta hoces, ispitujes piksele npr.
    if Bmp.Canvas.Pixels[100,100] = clGreen then ShowMessage('Piksel na poziciji 100,100 je zelene boje');
end;



Ako ti treba da ispitujes vise puta u sekundi onda je pozeljno da u pozivu BitBlt-a
prosledis koordinate koje ne obuhvataju ceo ekran kao u gornjem primeru vec samo deo
ekrana koji tebe interesuje. Takodje treba da podesis velicinu bitmape pre toga na
odgovarajucu velicinu. Na taj nacin ces dobiti brzi kod. Za ispitivanje piksela bitmap-a
smo vec imali raspravu na ovom forumu pa potrazi.

 
Odgovor na temu

ksrele
Programer - informatičar
Gold Drink D.O.O. Subotica
Subotica

Član broj: 14253
Poruke: 1642
*.yunord.net.

ICQ: 66444502


+47 Profil

icon Re: Iscitavanje piksela van aplikacije17.11.2003. u 11:24 - pre 247 meseci
Super, hvala morlic na pomoci, ujedno hvala i ostalima nadam se da niste samo meni pomogli nego da je jos neko iz ovoga izvukao neku korist:))))
Ovo mi je sasvim dovoljno da dalje sam eksperimentisem (ako naletim na "tvrd orah" javi cu se opet)...
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
80.93.225.*



+62 Profil

icon Re: Iscitavanje piksela van aplikacije17.11.2003. u 13:21 - pre 247 meseci
Evo ti verzija bez kopiranja, odnosno bitmape.
Umesto bitmape, kreiras Canvas:
Code:

  MyCanvas := TCanvas.Create;
  try
    MyCanvas.Handle := GetDC(0);
    // ovde neki tvoj kod
    // citanje pixela
    // crtanje pixela, zasto ne
  finally
    MyCanvas.Handle := nil; // ova linija skoro i da ne mora
    MyCanvas.Free;           // ova linija obavezno
  end;


Napomena: ako tvoje citanje/pisanje uzima iole vise vremena (vise od nekoliko ms), onda koristi varijantu sa bitmapom/kopiranjem. To zato da ne bi zadrzavao sistemsko osvezavanje desktopa.
Pozdrav

Rajko
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.info-net.co.yu

ICQ: 47761626


Profil

icon Re: Iscitavanje piksela van aplikacije17.11.2003. u 13:48 - pre 247 meseci
Citat:
ksrele:
Super, hvala morlic na pomoci, ujedno hvala i ostalima nadam se da niste samo meni pomogli nego da je jos neko iz ovoga izvukao neku korist:))))


Da. Moze i bez Glidea
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Iscitavanje piksela van aplikacije

[ Pregleda: 2473 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.