[ Pajke @ 30.10.2003. 09:57 ] @
naslov mozda nije najbolji ali zanima me kako da ( u DELPHI -ji) sa neke slike recimo crno bele ocitavam koji su pixeli ukluceni a koji ne ili jos bolje ako moze da se odredi koja je nijansa sive. Trazio sam po HELP-u ali nista nisam nasao.
dali ima neka komponenta za to ili postoji komanda koja to ocitava...
[ morlic @ 30.10.2003. 23:06 ] @
stavis na formu komponentu TImage (sa palete Additional) i ucitas joj sliku (za pocetak neku BMP sliku u sivim nijansama grayscale) preko Picture property-a.
Stavis dugme na formu i na OnClick stavis sledece:

Code:

procedure TForm1.BitBtn1Click(Sender: TObject);
Var Color : TColor;
    r, g, b : byte;
begin
     With Image1.Picture.Bitmap.Canvas do begin
     Color := Pixels[1,1]; // Pristupas pixelu na slici
                           // koji se nalazi na 1,1
                           // poziciji.

     // Boju pixela razlazes na r, g i b komponente
     r := GetRValue(Color);
     g := GetGValue(Color);
     b := GetBValue(Color);
     // Sada radi sa komponentama sta zelis
     // Kod slike u nijansama sive (grayscale)
     // r, g i b imaju iste vrednosti i to
     // tako da je vrednost nula - puna crna, a
     // vrednost 255 - puna bela boja, a sve izmedju
     // predstavlja nijanse
     end;
end;


Ako zelis da prolazis kroz sve pixele slike moras to da uradis tako sto ces napraviti
petlju. U svakom slucaju za brz prolazak kroz sliku mora se napraviti drugaciji
pristup, ali hajde prvo probaj ovo.
[ Pajke @ 02.11.2003. 08:44 ] @
Probao sam i radi, evo dole je prikacen kod koji sam na brzinu sklep`o on ocitava
100*100 pixela (za 10-ak sec.kod mene) i upisuje vrednosti u memo komponentu.
E sad meni bi ustvari trebalo da napravim program koji ce pratiti svetle ili tamne povrsine na slici (nesto kao ploter) a pixele koje je obradio trebalo bi da promene boju (neka boja bi oznacavala da je taj pixel obradjen)
-Sto se tice pracenja tu imam neke ideje ...
-zanima me moze li se menjati boja pixelima na slici (TImage)
[ morlic @ 02.11.2003. 12:29 ] @
Probaj sledecu varijantu:

Code:

// Dodaj u zaglavlju...
type
  PRGBArray = ^TRGBArray;
  TRGBArray = Array[0..2500] of TRGBTriple;
....

procedure TForm1.Button1Click(Sender: TObject);
Var Color : TColor;
    r, g, b : byte;
    n,i:integer;
begin
Var
  Y, X : integer;
  SL: PRGBArray;
begin
  Memo1.Lines.BeginUpdate;
  for Y := 0 to Image1.Picture.Bitmap.Height - 1 do
   begin
    SL := Image1.Picture.Bitmap.ScanLine[Y];
    for X := 0 to Image1.Picture.Bitmap.Width - 1 do
     begin
       Memo1.lines.add(Format('R=%d  G=%d  B=%d', [SL[X].rgbtRed,SL[X].rgbtGreen,SL[X].rgbtBlue] )
     end;
   end; 
   Memo1.Lines.EndUpdate;
end;
[ morlic @ 02.11.2003. 12:36 ] @
Mozes da menjas pixele:

samo stavis

SL[X].rgbtRed := xxx;
SL[X].rgbtGreen := xxx;
SL[X].rgbtBlue := xxx;
[ Pajke @ 03.11.2003. 13:16 ] @
Ova druga varijanta bi mi manje odgovarala jer cu ja pixele skenirati u raznim pravcima aovaj kod sliku skenira liniju po linij ako se ne varam jer nisam nikako mogao da ga nateram da proradi stalno mi prijavljuje razne greske u vezi

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

A kad uradim kako trazi onda prijavi drugu itd...
(trazi da stavim ' : ' pa kad ih stavim onda mu smeta '=' ,pa posle mu smeta ^ ,pa onda nezna sta je Array...)
posto ovo nije moglo onda ni ostatak koda nisam mogao probati.
(koristim Delphi 5 i 7 ako ima neke veze)

U principu odgovara mi onaj prvi kod ( uz male izmene) samo kako da menjam pixele
ako koristim prvu verziju znaci direkrno :npr. pixel x,y.Color:= neka boja... Moze li tako nesto ,Brzina mi nije mnogo bitna.
[ morlic @ 03.11.2003. 22:12 ] @
stavi "Windows" u USES, jer se tu nalazi definicija

Code:

  PRGBTriple = ^TRGBTriple;
  {$EXTERNALSYM tagRGBTRIPLE}
  tagRGBTRIPLE = packed record
    rgbtBlue: Byte;
    rgbtGreen: Byte;
    rgbtRed: Byte;
  end;
  TRGBTriple = tagRGBTRIPLE;
  {$EXTERNALSYM RGBTRIPLE}
  RGBTRIPLE = tagRGBTRIPLE;


kada ovo ubacis (Windows u USES) sve bi trebalo da radi kako treba. Ovo je mnogo brze od onog prvog pristupa, ali ako ti brzina nije bitna onda koristi prvu varijantu.

[ Pajke @ 04.11.2003. 20:25 ] @
Hvala na odgovorima
Bili su korisni