iç içe döngüde sorun

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

iç içe döngüde sorun

Mesaj gönderen tuanna »

ağabeylerimkardeşlerim aşağıda kullanmaya çalıştığım bir döngü var bu döngüde ben ekrandaki piksel piksel renk kodlarını almaya çalışıyorum...ama ikinci döngü ilerlerken...birinci döngü ilerlemiyor....



var
q,w,e,r:longint;
a,s,d:tcolor; /
aa,ab,ac:tcolor;/
begin
Okunanrenkkodlari.Clear;
gosterge.Visible:=true;
gosterge.max:=0;
gosterge.Min:=0;
gosterge.Max:=yukresm.picture.Width*yukresm.picture.Height;
Okunanrenkkodlari.Lines.Add('RGB Değeri X Y Kordinat');

while q <yukresm.Picture.Width do
begin
while w < yukresm.Picture.Height do
Begin
gosterge.Position:=gosterge.Position+1;
aa:=GetRValue(yukresm.Canvas.Pixels[q,w]);
ab:=GetGValue(yukresm.Canvas.Pixels[q,w]);
ac:=GetBValue(yukresm.Canvas.Pixels[q,w]);
Okunanrenkkodlari.Lines.Add('R :'+inttostr(aa)+' G:'+inttostr(ab)+' B:'+inttostr(ac)+
' X:'+inttostr(q)+' Y:'+inttostr(w));
gosterge.Visible:=false;
inc(w,10);
inc(q,10);
end;


end;
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Kod gönderirken lütfen Code tagleri içinde gönderin ve ayrıca bir de tavsiye, blok programlamada ve okunaklığı arttırması için girintiler (Bloklar) oluşturun.

Sizin adınıza ben biraz düzeltip yolluyorum (ayrıca sorununuzu da açıklayacağım)

Kod: Tümünü seç

var
  q,w,e,r:longint;
  a,s,d:tcolor; /
  aa,ab,ac:tcolor;/
begin
  Okunanrenkkodlari.Clear;
  gosterge.Visible:=true;
  gosterge.max:=0;
  gosterge.Min:=0;
  gosterge.Max:=yukresm.picture.Width*yukresm.picture.Height;
  Okunanrenkkodlari.Lines.Add('RGB Değeri X Y Kordinat');

  while q <yukresm.Picture.Width do
  begin
    while w < yukresm.Picture.Height do
    Begin
    gosterge.Position:=gosterge.Position+1;
    aa:=GetRValue(yukresm.Canvas.Pixels[q,w]);
    ab:=GetGValue(yukresm.Canvas.Pixels[q,w]);
    ac:=GetBValue(yukresm.Canvas.Pixels[q,w]);
    Okunanrenkkodlari.Lines.Add('R :'+inttostr(aa)+' G:'+inttostr(ab)+' B:'+inttostr(ac)+ ' X:'+inttostr(q)+' Y:'+inttostr(w));
    gosterge.Visible:=false;
    inc(w,10);
//    inc(q,10); <- Burası Yanlış yerde bu şekilde yazarsanız Solüstten sağ
//alta doğru çapraz bir hat üzerinde ilerlersiniz ve döngünüz işe yaramaz
  end; 
  inc(q,10); <- Burada olmalı ama 10'ar 10'ar niye gidiyorsunuz onu anlamadım ??? 
end; <- Burası Eksik 
Aslında şöyle bir mantık izleseniz daha iyi olur gibi

Kod: Tümünü seç

  for intY := 0 Resmin.Boyu (Y'si)
    for intX := 0 to Resmin.Eni do (X'i)
    begin
      Resmin RGB'lerini Değişkenlere At, 
      Canvas'ın intX ve intY'sine göre
      Bunları Göster
    end ;
Böylelikle daha kısa bir kod elde etmiş olursunuz. Ama belki 10'ar 10'ar gitmenizin bir manası vardır buna göre yapıyorsunuzdur ;)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

arkadaşlar böle çalıştı ya




q:=0;
w:=0;
while q <yukresm.Picture.Width do

begin
for w:=1 to yukresm.Picture.Height do
begin
gosterge.Position:=gosterge.Position+1;
aa:=GetRValue(yukresm.Canvas.Pixels[q,w]);
ab:=GetGValue(yukresm.Canvas.Pixels[q,w]);
ac:=GetBValue(yukresm.Canvas.Pixels[q,w]);
Okunanrenkkodlari.Lines.Add('R :'+inttostr(aa)+' G:'+inttostr(ab)+' B:'+inttostr(ac)+
' X:'+inttostr(q)+' Y:'+inttostr(w));
gosterge.Visible:=false;
// inc(w,10);
end;
inc(q,100);
end;
Siz hayal edin...Biz yapalım TuannaSoft...
Cevapla