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

Izazov - grayscale efekt

[es] :: Pascal / Delphi / Kylix :: Izazov - grayscale efekt

[ Pregleda: 2336 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

protech_v2
protech_v2
Novi Sad

Član broj: 12426
Poruke: 169
*.metrohive.net.



+12 Profil

icon Izazov - grayscale efekt10.12.2004. u 10:04 - pre 235 meseci
Je l' moze neko od gurua da mi kaze kako da napravim da mi se ostatak ekrana osim zeljenog prozora prikazuje grayscale kao recimo kad se pokaze shutdown dijalog u XP-u?

Ne mora da se fade-uje, samo da bude grayscale

Pretpostavljam da ide preko DirectX-a?
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.61.eunet.yu.



+1 Profil

icon Re: Izazov - grayscale efekt10.12.2004. u 12:31 - pre 235 meseci
Imas srece, ne treba DirectX. Stvar mozes izvesti na sledeci nacin: Uzmes sliku ekrana pre prikazivanja tvog prozora koji cemo nazvati A. Tu sliku pretvoris u grayscale. Prvo kreiras prozor B koji podesis da nema ivice, da je maximized i prikazes ga sa show. U njemu naravno imas preko celog prozora TImage u koji ces staviti onu grayscale sliku. Zatim prikazes prozor A preko njega i to je to. I windows to radi vrlo slicno.

Da malo pomognem evo nekih metoda koji ti trebaju za trik:

Code:

...
type
  PRGBArray = ^TRGBArray;
  TRGBArray = Array[0..2500] of TRGBTriple;
...

procedure TakeScreenShot(Bm : TBitmap);
var
  DC: hDC;
  X, Y: integer;
  ScreenWidth, ScreenHeight: integer;
  r : word;
begin
  ScreenWidth:= GetSystemMetrics(sm_CXScreen);
  ScreenHeight:= GetSystemMetrics(sm_CYScreen);

  Bm.Width:= ScreenWidth;
  Bm.Height:= ScreenHeight;
  Bm.PixelFormat:= pf24bit;

  DC:= GetDC(0);
  try
    BitBlt( Bm.Canvas.Handle, 0, 0,
      ScreenWidth, ScreenHeight, DC, 0, 0, SrcCopy);
  finally
    ReleaseDC(0, DC);
  end;
end;

procedure GrayOutBitmap(Bm : TBitmap);
Var
  Y, X : integer;
  SL: PRGBArray;
begin
  for Y := 0 to Bm.Height - 1 do
    begin
       SL := Bm.ScanLine[Y];
       for X := 0 to Bm.Width - 1 do
       begin
         SL[X].rgbtRed := Round( 0.212671 * SL[X].rgbtRed + 0.715160 * 
           SL[X].rgbtGreen + 0.072169 * SL[X].rgbtBlue );
         SL[X].rgbtGreen := SL[X].rgbtRed;
         SL[X].rgbtBlue := SL[X].rgbtRed;
       end
    end;
end;

 
Odgovor na temu

protech_v2
protech_v2
Novi Sad

Član broj: 12426
Poruke: 169
*.metrohive.net.



+12 Profil

icon Re: Izazov - grayscale efekt10.12.2004. u 13:11 - pre 235 meseci
wou, svaka cast - ovakvom odgovoru se stvarno nisam nadao, hvala puno!
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
*.vdial.verat.net.

Sajt: www.diy-fever.com


+1 Profil

icon Re: Izazov - grayscale efekt10.12.2004. u 13:55 - pre 235 meseci
sta si ti ocekivao? "super smash hit box office monkey movie" sto bi reko Svarceneger :)
onaj fade-olike efekt mozes da dobijes ako mu smanjujes saturation postepeno...onda polako gubi boje i postaje grayscale
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

neor
Nenad Orlovic

Član broj: 26828
Poruke: 74
*.metrohive.net.



Profil

icon Re: Izazov - grayscale efekt10.12.2004. u 16:51 - pre 235 meseci
Code:
SL[X].rgbtRed := Round( 0.212671 * SL[X].rgbtRed + 0.715160 * 
           SL[X].rgbtGreen + 0.072169 * SL[X].rgbtBlue );


Da li mozes da das neki link sa (sto detaljnijim) objasnjenjima za ove koeficijente?
Bas me zanima kako se doslo do njih.
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
195.246.3.*



Profil

icon Re: Izazov - grayscale efekt10.12.2004. u 18:00 - pre 235 meseci
Na ovom linku ima nekoliko razlicitih metoda konverzije y RGB->Gray.

http://astronomy.swin.edu.au/~pbourke/colour/imageprocess/

ss
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

neor
Nenad Orlovic

Član broj: 26828
Poruke: 74
*.metrohive.net.



Profil

icon Re: Izazov - grayscale efekt10.12.2004. u 20:51 - pre 235 meseci
Hvala za link.
Mislio sam malo detaljnije objasnjene razloge za te koeficijente i kako se doslo do njih, eksperimentalno ili nekim drugim metodom.
U svakom slucaju sad bar znam bolje sta treba da trazim.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.122.eunet.yu.



+1 Profil

icon Re: Izazov - grayscale efekt10.12.2004. u 21:52 - pre 235 meseci
Postoji nekoliko nacina kojima se od kolor slike pravi gray varijanta, ja sam ovu izabrao zato sto mi najlepse izgleda. Kod "sive" slike stos je da Red, Green i Blue komponente imaju istu vrednost (izmedju 0 i 255).
Nula daje crnu boju: R:0 G:0 B:0 dok R:255 G:255 B:255 daje belu boju, sve izmedju su nijanse. Onaj kod koji sam ti gore postovao koristi malu varijaciju.

Evo jednog linka vezanog za sve i svasta koji ce biti interesantan sirem auditorijumu:

http://www.efg2.com/Lab/index.html
 
Odgovor na temu

protech_v2
protech_v2
Novi Sad

Član broj: 12426
Poruke: 169
*.metrohive.net.



+12 Profil

icon Re: Izazov - grayscale efekt13.12.2004. u 11:16 - pre 235 meseci
Radi odlicno!
Ovo mi bas koristi (nisam ga stavljao za sminku) jer je inace interfejs dosta slozen, pa je ovako puno preglednije i omogucava bolji fokus na detalje u novoj formi...

Jedino sto me zanima koliko to otprilike trosi memorije?
Znam da zavisi od velicine ekrana, a s obzirom da je bitmap, najvise 1-2MB, je l' tako?

Moram da razmisljam i o ovim klijentima sa 32MB RAM-a (jad i beda) pa cu verovatno uraditi neku proveru kolicine RAM-a, pa u zavisnosti od toga ukljuciti/iskljuciti ovu opciju

 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
195.252.103.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Izazov - grayscale efekt13.12.2004. u 11:39 - pre 235 meseci
mozes da ga u letu kompresujes u JPG, odmah posle konverzije u Grayscale, to ti moze osloboditi malo memorije...
ovako sam ja radio to
Code:

procedure TForm1.CompressJPG;
var
   aJPEGImage : TJPEGImage;
   aPicture : TPicture;
begin
   aPicture   := TPicture.Create;
   aJPEGImage := TJPEGImage.Create;
   try
     aPicture.LoadFromFile(temp.bmp');
     DeleteFile(temp.bmp');
     aJPEGImage.CompressionQuality:=45;
     aJPEGImage.Assign(aPicture.Graphic);
     aJPEGImage.Compress;
     aJPEGImage.SaveToFile(temp.jpg');
    finally
     aPicture.Free;
     aJPEGImage.Free;
   end
end;

Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
*.zaslon-telecom.si.



Profil

icon Re: Izazov - grayscale efekt13.12.2004. u 11:46 - pre 235 meseci
Mislim da kompresija nema veze s tim. Da bi se bitmapa prikazala na ekranu, mora biti u nekom prikladnom formatu (bmp). Ne vidim sta tu kompresija radi?

ss.
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

protech_v2
protech_v2
Novi Sad

Član broj: 12426
Poruke: 169
*.metrohive.net.



+12 Profil

icon Re: Izazov - grayscale efekt13.12.2004. u 13:30 - pre 235 meseci
Pa da, ni ja ne vidim smisao - u prinicipu taj jpg se i dalje u pozadini dekompresuje da bi se slika pokazala na ekranu - jeste se lossy kompresijom kao sto je JPEG gube podaci sa slike, pa kao zauzima manje mesta, ali bitmap odredjenih dimenzija i dubine boja ce uvek zauzimati jednako memorije bez obzira sta sadrzi (da li jednu ili drugu sliku). Barem koliko ja znam, mozda i gresim
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.147.eunet.yu.



+1 Profil

icon Re: Izazov - grayscale efekt13.12.2004. u 16:49 - pre 235 meseci
Samo ti to drzi kao bitmap-u (jpg ne donosi pozitivnu razliku da ne ulazim sada u detalje). Trosi se vise memorije tako da nije lose da razmislis o toj slici kao opciji na slabijim masinama. Mozda da opciju automatski podesava program. Kada se prvi put pokrene neka prikaze sliku, posle toga na osnovu fizickog RAM-a i brzine procesora mozes staviti i da program automatski iskljucujuje opciju, kako korisnik o tome ne bi razmisljao, a imas i opciju manje u podesavanjima. Balans izmedju lepog i brzog...
 
Odgovor na temu

protech_v2
protech_v2
Novi Sad

Član broj: 12426
Poruke: 169
*.metrohive.net.



+12 Profil

icon Re: Izazov - grayscale efekt14.12.2004. u 12:41 - pre 235 meseci
Da, tako bi bilo najbolje - tako cu i uraditi, jedino sto cu jos mozda promeniti je da jos malo potamnim sliku da bi bilo kontrastnije, ali to su vec sitnice.

Jos jednom hvala na kodu i pomoci!
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Izazov - grayscale efekt

[ Pregleda: 2336 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

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