Resim Pixeli Analiz Ederken Yavaşlık..
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Resim Pixeli Analiz Ederken Yavaşlık..
Selam Arkadaşlar, Bi uygulamam var, bu uygulamada bi örnegin 100x100 pixellik bir resmin her pixelindeki rengi analiz ediyorum, ve döngü sonunda çıkan sonucu bi degişkene atıyorum. Bu işlemi yaparken bi sıkıntım yok, ancak bu konu diger uygulamama o oluşturgudum renkgrubuyla yeniden oluşturmak istedigimde yavaş yapıyor. Pixellerin dolduruluşunu görüyorum. Sizde sorun nerede olabilir? Algoritmamda da o kadar kasacak bişey yok,Resimlerde sadece 4 renk kullanılıyorancak yavaş ilerliyo..
Re: Resim Pixeli Analiz Ederken Yavaşlık..
Neden yavaş ilerlediğini sormuşsunu ama uyguladığınız kodu yazmayı unutmuşsunuz !? Neye dayanarak cevap yazalım ben bilemedim.
Bu kadar genel kapsamlı veri karşılığında aynı oranda genel kapsamlı cevap alabilirsiniz. Cevabım, uyguladığınız kodda mantık hatası vardır. Kodu görmeden bişey demek zor ama işlemi doğru yaptığını ancak sürenin uzunluğunu ifade ettiğinize göre sorun hakkındaki öngörüm, iç içe döngü kurduğunuzda gereğinden fazla adımla işlem yürüyor, sonuna kadar beklemeye gerek yokken arada BREAK koymayıp sonuna kadar dönmesini bekliyor olmalısınız. İlk hata budur. Diğer hata SCANLINE ile satırı topluca okumak yerine pixel by pixel okuyor olmalısınız. Bu da gecikme yaptırır.

Bu kadar genel kapsamlı veri karşılığında aynı oranda genel kapsamlı cevap alabilirsiniz. Cevabım, uyguladığınız kodda mantık hatası vardır. Kodu görmeden bişey demek zor ama işlemi doğru yaptığını ancak sürenin uzunluğunu ifade ettiğinize göre sorun hakkındaki öngörüm, iç içe döngü kurduğunuzda gereğinden fazla adımla işlem yürüyor, sonuna kadar beklemeye gerek yokken arada BREAK koymayıp sonuna kadar dönmesini bekliyor olmalısınız. İlk hata budur. Diğer hata SCANLINE ile satırı topluca okumak yerine pixel by pixel okuyor olmalısınız. Bu da gecikme yaptırır.
Re: Resim Pixeli Analiz Ederken Yavaşlık..
mümkünse asm kullanın, baya fark yaratacaktır.
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
'Yükseldikçe küçülen bir uçurtma..'
Re: Resim Pixeli Analiz Ederken Yavaşlık..
mrmarman yazdı:Neden yavaş ilerlediğini sormuşsunu ama uyguladığınız kodu yazmayı unutmuşsunuz !? Neye dayanarak cevap yazalım ben bilemedim.![]()
Bu kadar genel kapsamlı veri karşılığında aynı oranda genel kapsamlı cevap alabilirsiniz. Cevabım, uyguladığınız kodda mantık hatası vardır. Kodu görmeden bişey demek zor ama işlemi doğru yaptığını ancak sürenin uzunluğunu ifade ettiğinize göre sorun hakkındaki öngörüm, iç içe döngü kurduğunuzda gereğinden fazla adımla işlem yürüyor, sonuna kadar beklemeye gerek yokken arada BREAK koymayıp sonuna kadar dönmesini bekliyor olmalısınız. İlk hata budur. Diğer hata SCANLINE ile satırı topluca okumak yerine pixel by pixel okuyor olmalısınız. Bu da gecikme yaptırır.
Değerli yorumlarınız ve fikirleriniz için çok teşekkür ederim.. Haklısınız pixel by pixel olarak okuyorum. Ancak okurken degil yeniden yazarken oluyo bu yavaşlık.. Application.ProcessMessages; kullandım her pixelin doluşunu izleyebiliyorum. teker teker oluyo hızlıca olması gerekdigi yerde... Size kodları veriyim, incelerseniz çok sevinirim. Scanline demişsiniz, ben onun nasıl bişey oldugunu bilmiyorum..
Bu blokta image nesnesinin pictureına verdigim 32x32 pixellik bir fotuyu analiz ediyorum. Butona tıkladıgım anda analizini bitiriyor.
Çıktısı bu şekilde oluyo. Sonra ben bu string i alıp bir global degişkene atıyorum. ResimKoduAnaliz prosedürününün içinde bu global degişkenin içerigi koda bakınca anlayacagınız gibi oluyo. harf harf alıp RenkYazdır prosedürüme parametre olarak veriyorum, o da bu harfi hangi o an ki belirtilmiş olan pixele yazıyor. Böyle böyle devam ediyor.
bbbbbbbbbbbrrrrrrrrrrbbbbbbbbbbbbbbbbbbbrrrbbbbbbbbbbrrbbbbbbbbbbbbbbbbrrbbbbbbbbbbbbbbrrbbbbbbbbbbbbrrbbbyyyyyyyyyybbbbrrbbbbbbbbbbrrbbbyy
yyyyyyyyyybbbbbrbbbbbbbbrrbbbbybbbbbbbbyybybbbbbrbbbbbbbrbbbbybbbbbbbbbyybybbbbbbrbbbbbrbbbbbybybbybbybybbbybbbbbrrbbbrrbbbbyyybyybyybyybb
bybbbbbbrbbbrbbbbbybbybbybbyyybbbyybbbbbrrbbrbbbbbybbbbbbbbbybbybbybbbbbbrbrbbbbbybybbybbybbybyyybyybbbbbrbrbbbbbyybyybyybyybbyyybbybbbbbr
brbbbbbybybbybbybybbyyybbybbbbbbrrbbbbbybbbbbbbbbybbyyybbybbbbbbrrbbbbbybybbybbybybbyyybbybbbbbbrrbbbbbyybyybyybyybbyyybbybbbbbbrrbbbbbyby
bbybbybybbyyybbybbbbbbrrbbbbbybbbbbbbbbybbyyybbybbbbbbrrbbbbbybbybbybbyybbyyybbybbbbbrbrbbbbbyyybyybyybybbyyybbybbbbbrbbrbbbbbybybbybbybyb
yyybybbbbbbrbbrbbbbbybbbbbbbbbybbybbybbbbbrbbbbrbbbbybybbybbybybbbbbybbbbbrbbbbrrbbbbybyybyybyyybbbybbbbbrbbbbbbrbbbbyybbybbybbybbbybbbbr
bbbbbbbbrbbbbbybbbbbbbbybybbbbrrbbbbbbbbbrbbbbyyyyyyyyyyybbbbrrbbbbbbbbbbbrrbbbyyyyyyyyybbbbrbbbbbbbbbbbbbbrrrbbbbbbbbbbbbrrbbbbbbbbbbbbbb
bbbrrrrbbbbbbrrrbbbbbbbbbbbbbbbbbbbbbbbrrrrrrbbbbbbbbbbbbb
Kod: Tümünü seç
for Y := 0 to Image1.Width-1 do
begin
for X := 0 to Image1.Width-1 do
begin
if(ColorToString(Image1.Picture.Bitmap.Canvas.Pixels[X,Y])='clRed') then
renk:='r'
else
if(ColorToString(Image1.Picture.Bitmap.Canvas.Pixels[X,Y])='clYellow') then
renk:='y'
else
if(ColorToString(Image1.Picture.Bitmap.Canvas.Pixels[X,Y])='clBlack') then
renk:='b'
else
if(ColorToString(Image1.Picture.Bitmap.Canvas.Pixels[X,Y])='clLime') then
renk:='g';
renkkodlari:=renkkodlari+renk;
end;
end;
ResimKoduAnaliz Procedure...
Kod: Tümünü seç
procedure TForm1.ResimKoduAnaliz();
var
sondeger:Ansistring;
I:Int16;
begin
if(yaz='')then
begin
ShowMessage('bitti');
end
else
begin
for I := 0 to Length(yaz)-1 do
begin
sondeger:=LeftStr(yaz,index);
RenkYazdir(string(sondeger));
yaz:=AnsiString(AnsiRightStr(String(yaz),Length(String(yaz))-index));
end;
ShowMessage('Analiz Sona Erdi.');
end;
end;
Kod: Tümünü seç
procedure TForm1.RenkYazdir(gelenveri:string);
var
myshape:TShape;
renk:mycolortype;
begin
Application.ProcessMessages;
renk.color:=clBlack;
if(gelenveri='r')then
begin
renk.color:=clRed;
end
else if(gelenveri='y') then
begin
renk.color:=clYellow;
end
else if(gelenveri='g') then
begin
renk.color:= clLime;
end
else if gelenveri='b' then
begin
renk.color:= clBlack;
end;
if(sayac<=31)then
begin
myshape:= TShape.Create(nil);
myshape.Parent:=self;
myshape.Enabled:=True;
myshape.Pen.Color:= renk.color;
myshape.Pen.Style:=psSolid;
myshape.Brush.Color:= renk.color;
myshape.Shape:=stRectangle;
myshape.Left:=SLeft+SWidth;
SLeft:=SLeft+SWidth;
myshape.Height:=5;
myshape.Top:=STop;
myshape.Width:=SWidth;
sayac:=sayac+1;
end else
if(sayac>31)then
begin
sayac:=0;
SLeft:=500;
STop:= STop+5;
myshape:= TShape.Create(nil);
myshape.Parent:=Self;
myshape.Enabled:=True;
myshape.Pen.Color:= renk.color;
myshape.Pen.Style:=psSolid;
myshape.Brush.Color:=renk.color;
myshape.Shape:=stRectangle;
myshape.Left:=SLeft+SWidth;
SLeft:=SLeft+SWidth;
myshape.Height:=5;
myshape.Top:=STop;
myshape.Width:=SWidth;
sayac:=sayac+1;
end;
end;
Re: Resim Pixeli Analiz Ederken Yavaşlık..
qamyoncu yazdı:mümkünse asm kullanın, baya fark yaratacaktır.
Cevap için tşk ederim.. Asm nin ne oldugunu bilmiyorum açıkcası.. Google da arattım assembly sonuçları çıktı. Biraz daha açarmısınız asm yi ve tam olarak ne işe yaradığını.. nasıl kullanıldığını..
Re: Resim Pixeli Analiz Ederken Yavaşlık..
bu bbrryy stringini neden oluşturduğunuzu anlamadım...
resimdeki pixelin rengine göre string karşılığını alıyorsunuz, sonra da bu string üzerinden renk değerini alıp shape nesnesinin rengine atama yapıyorsunuz gördüğüm kadarıyla.. bbbrrryy stringinin başka bir kullanım yeri var mı benim göremediğim?
renk değerini doğrudan neden kullanmadınız onu anlamadım
resimdeki pixelin rengine göre string karşılığını alıyorsunuz, sonra da bu string üzerinden renk değerini alıp shape nesnesinin rengine atama yapıyorsunuz gördüğüm kadarıyla.. bbbrrryy stringinin başka bir kullanım yeri var mı benim göremediğim?
renk değerini doğrudan neden kullanmadınız onu anlamadım
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Re: Resim Pixeli Analiz Ederken Yavaşlık..
unicorn64 yazdı:bu bbrryy stringini neden oluşturduğunuzu anlamadım...
resimdeki pixelin rengine göre string karşılığını alıyorsunuz, sonra da bu string üzerinden renk değerini alıp shape nesnesinin rengine atama yapıyorsunuz gördüğüm kadarıyla.. bbbrrryy stringinin başka bir kullanım yeri var mı benim göremediğim?
renk değerini doğrudan neden kullanmadınız onu anlamadım
bbbrrryy stringini oluşturduktan sonra, uzaktaki bir makinada açmış oldugum server uygulamama string tipinde yollayarak ResimKoduAnaliz ve RenkYazdir procedurelerimi çalıştırarak bu string ile yeniden aynı fotografı oluşturuyorum. Ancak ilk verdigim kod blogu ile ilk önce bu bbbrrryy.... oluşturmam lazım. bu arada b black, r red, y yellow, g green i temsil ediyor.. ancak bu bbbrrryyyygg stringini oluştururken çok uzun sürüyor işlem. yani 32x32 lik bir resimde çok fazla hissedilmiyor. 1024 tane karakteri teker teker analiz ediyor.. ancak 100x100, yada 48x288px (13824 karakter)'lik bir foto analiz etmek istedigimde çok bekletebiliyo. o ilk verdigim blogu kendinizde deneyince göreceksiniz ki bekletiyo biraz. hatta Form3.Caption:= IntToStr(X)+' '+IntToStr(Y); kodunu renkkodlari:=renkkodlari+renk; dan sonra yazınca teker teker hangi pixelden geçtigini görebiliyorum. bu garip geliyo bana, çünkü çok hızlı olması gerekirdi diye düşünüyorum... Sizce nasıl çözebilirim bu sorunu..iki sorunum var, hem okurken hemde yeniden fotoyu oluştururken yavaşlık sorunu ancak Şimdilik odaklanmam gereken bu string i oluştururkenki hız sorunu..
Re: Resim Pixeli Analiz Ederken Yavaşlık..
İşinizi bir miktarda olsa hızlandıracak anahtar kelime Scanline. isterseniz ben c++builder örnekleri gönderirim ama basit bir google aramasıyla onlarca örnek bulursunuz.
Re: Resim Pixeli Analiz Ederken Yavaşlık..
İnanın siz bana söylediginizden bu saatte kadar araştırıyorum, buluyorum bişeyler ama anlayamıyorum yapılmak istenileni. şu tarzda şeyler buluyorum hep, ancak anlamıyorum.cecihan yazdı:İşinizi bir miktarda olsa hızlandıracak anahtar kelime Scanline. isterseniz ben c++builder örnekleri gönderirim ama basit bir google aramasıyla onlarca örnek bulursunuz.
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
x,y : Integer;
BitMap : TBitMap;
P : PByteArray;
begin
BitMap := TBitMap.create;
try
BitMap.LoadFromFile('MyBitmap.png');
for y := 0 to BitMap.Height -1 do
begin
P := BitMap.ScanLine[y];
for x := 0 to BitMap.Width -1 do
P[x] := y;
end;
Canvas.Draw(0,0,BitMap);
finally
BitMap.Free;
end;
end;




aşagıdaki kod blogundan kısa bi alıntı göstercem size:
Line[x].B := 0;
Line[x].G := 0;
Line[x].R := x xor y;
Line[x].A := 0;
Şurada da aynısı yapılmış. anlamıyorum neden böyle yaptıklarını, sabitlemişler sanki rengi ama benim çekmek istedigim renkler 4 tane olacak, hangisi oldugunu nerden bilecek bu scanline fonksiyonu.. heryerde hızlı oldugu söylenmiş, biraz bişi yapmışlar ama hep bu şekilde...
Kod: Tümünü seç
var
x,y : Integer;
Line : PRGB32Array;
begin
with Image1.Picture.Bitmap do
begin
PixelFormat := pf32bit;
Width := Image1.Width;
Height := Image1.Height;
for y := 0 to Height - 1 do
begin
Line := Scanline[y];
for x := 0 to Width - 1 do
begin
Line[x].B := 0;
Line[x].G := 0;
Line[x].R := x xor y;
Line[x].A := 0;
end;
end;
end;
Image1.Invalidate;
Re: Resim Pixeli Analiz Ederken Yavaşlık..
önceki mesajınızdan şunu çıkardım,
server-client yapı var
client resmi elde ediyor (kameradan alıyor,dosyadan alıyor vs önemli değil)
resmin pixelleri üzerinden döngü kurup resmi string olarak kodluyorsunuz (bbggrryy oluşturuluyor)
oluşan string servera yollanıyor
server gelen stringe göre resmi oluşturuyor..
şimdi RenkYazdir da neden shape oluşturuluyor?
olay server-client arası resim transferi ise neden böyle karmaşık bir yapı kurguladınız ki,doğrudan dosya transferi yada byte dizisiyle aktarım daha kolay olmaz mıydı?
server-client yapı var
client resmi elde ediyor (kameradan alıyor,dosyadan alıyor vs önemli değil)
resmin pixelleri üzerinden döngü kurup resmi string olarak kodluyorsunuz (bbggrryy oluşturuluyor)
oluşan string servera yollanıyor
server gelen stringe göre resmi oluşturuyor..
şimdi RenkYazdir da neden shape oluşturuluyor?
olay server-client arası resim transferi ise neden böyle karmaşık bir yapı kurguladınız ki,doğrudan dosya transferi yada byte dizisiyle aktarım daha kolay olmaz mıydı?
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Re: Resim Pixeli Analiz Ederken Yavaşlık..
Scanline yapısını öğrenmen için kendi projenle ilişkili olarak karşılaştırmalı bir örnek hazırladım.
Bu kadar küçük image nesnelerinde scanline veya pixels kullanımında hızla ilgili öyle aman aman sorunun yaşamazın. Ben ilk cevapta dah büyük ve renk derinliği yüksek image içeriğinde işlem yaptığını (yani bir ekran kopyasını başka bilgisayara aktarsaydın gibisinden) scanline kullanmanı önermiştim.
Sen bildiğin yöntemi uygula. Buradaki hatan direkt görsel bir ortama taşımaya çalışmandan dolayı her adımda görsel işlemin sonucunu bekliyor olmandan kaynaklı. Yani resmi bileşenlerine ayırmaya kadar sorun yok diyebilirim. Sorun satır satır aktarıp shape dönüşümünde. Bunu shape ile değil de yine canvas üzerine rectangle ile kareler çizerek yaparsan hızla ilgili sorunun kalmayacaktır.
Bumesaj ekinde örnek proje göreceksin. Örnekte, kendi mesajında belirttiğin string ifadeyi resme dönüştürüp, bu dönüştürülen resmi bir Pixels ile bir de ScanLine ile karşılaştırmalı olarak işleme alış hızlarını aynı resim için inceleme fırsatı sunmak amaçlı.
Resme Dönüşüm Kodu :
Canvas.Pixels metodu ile deşifre edilişi
Scanline ile deşifre edilişi.
umarım faydalı olur. Başarılar.

Bu kadar küçük image nesnelerinde scanline veya pixels kullanımında hızla ilgili öyle aman aman sorunun yaşamazın. Ben ilk cevapta dah büyük ve renk derinliği yüksek image içeriğinde işlem yaptığını (yani bir ekran kopyasını başka bilgisayara aktarsaydın gibisinden) scanline kullanmanı önermiştim.
Sen bildiğin yöntemi uygula. Buradaki hatan direkt görsel bir ortama taşımaya çalışmandan dolayı her adımda görsel işlemin sonucunu bekliyor olmandan kaynaklı. Yani resmi bileşenlerine ayırmaya kadar sorun yok diyebilirim. Sorun satır satır aktarıp shape dönüşümünde. Bunu shape ile değil de yine canvas üzerine rectangle ile kareler çizerek yaparsan hızla ilgili sorunun kalmayacaktır.
Bumesaj ekinde örnek proje göreceksin. Örnekte, kendi mesajında belirttiğin string ifadeyi resme dönüştürüp, bu dönüştürülen resmi bir Pixels ile bir de ScanLine ile karşılaştırmalı olarak işleme alış hızlarını aynı resim için inceleme fırsatı sunmak amaçlı.
Resme Dönüşüm Kodu :
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
Const
Kodlar = ( ['r', 'b', 'y', 'g'] );
Var
i, j : Integer;
Veri : String;
RenkKodu : Char;
begin
Image1.Picture.Bitmap.Width := 32;
Image1.Picture.Bitmap.Height := 32;
Image1.Picture.Bitmap.PixelFormat := pf8Bit;
Image1.Picture.Bitmap.Canvas.Brush.Color := clWhite;
Image1.Picture.Bitmap.Canvas.FillRect( Image1.Picture.Bitmap.Canvas.ClipRect );
i := -1;
j := 0;
Veri := Trim(Memo1.Text);
while Length(Veri) > 0 do
begin
while (Length(Veri) > 0) AND (NOT (Veri[1] in Kodlar) )
do System.Delete(Veri, 1, 1); // Yabancı kod veya karakter varsa eledik.
RenkKodu := Veri[1];
System.Delete(Veri, 1, 1);
inc(i);
if i > 31 then begin
i := 0;
inc(j);
end;
case RenkKodu of
'r': Image1.Picture.Bitmap.Canvas.Pixels[i,j] := clRed;
'y': Image1.Picture.Bitmap.Canvas.Pixels[i,j] := clYellow;
'b': Image1.Picture.Bitmap.Canvas.Pixels[i,j] := clBlack;
'g': Image1.Picture.Bitmap.Canvas.Pixels[i,j] := clLime;
end;
end;
end;
Kod: Tümünü seç
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
i, j : Integer;
RenkKodu : Char;
Satir : String;
begin
i := 0;
j := 0;
Memo2.Lines.Clear;
Application.ProcessMessages;
while i < 32 do begin
Satir := '';
while j < 32 do begin
RenkKodu := '.';
case Image1.Picture.Bitmap.Canvas.Pixels[j,i] of
clRed : RenkKodu := 'R';
clYellow : RenkKodu := 'Y';
clBlack : RenkKodu := 'B';
//clLime : RenkKodu := 'G';
end;
Satir := Satir + RenkKodu;
inc(j);
end;
Memo2.Lines.Add(Satir);
j := 0;
inc(i);
end;
end;
Kod: Tümünü seç
procedure TForm1.BitBtn3Click(Sender: TObject);
Var
Okunan : pByteArray;
i, j : Integer;
RenkKodu : Char;
Satir : String;
begin
i := 0;
j := 0;
Memo2.Lines.Clear;
Application.ProcessMessages;
while i < 32 do begin
Okunan := pByteArray( Image1.Picture.Bitmap.Scanline[i] );
Satir := '';
while j < 32 do begin
RenkKodu := '.';
case Okunan[j] of
$F9 : RenkKodu := 'R';
$FB : RenkKodu := 'Y';
$00 : RenkKodu := 'B';
//clLime : RenkKodu := 'G';
end;
Satir := Satir + RenkKodu;
inc(j);
end;
Memo2.Lines.Add(Satir);
j := 0;
inc(i);
end;
end;

En son mrmarman tarafından 01 Nis 2011 08:21 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Resim Pixeli Analiz Ederken Yavaşlık..
Evet aynen anlattıgınız gibi bir işleyişi var.. Shape ile oluşturmamın nedeni deneme amaçlı, acaba sorunsuz analiz edip kodları oluşturuyormuyum ve bu kodlar eksiksiz ve düzgün bir şekilde yerine ulaşıyor mu onu ögrenme amaçlı.. transferi string olarak yapmak zorundayım, benden istenen bu şekilde çünkü, byte dizisiyle yapmayı denedim ama yapamadım. Gerçi her halukarda string olarak yollamam lazım.. Stringi oluşturma işlemi uzun sürüyor, kısaltmam lazım..unicorn64 yazdı:önceki mesajınızdan şunu çıkardım,
server-client yapı var
client resmi elde ediyor (kameradan alıyor,dosyadan alıyor vs önemli değil)
resmin pixelleri üzerinden döngü kurup resmi string olarak kodluyorsunuz (bbggrryy oluşturuluyor)
oluşan string servera yollanıyor
server gelen stringe göre resmi oluşturuyor..
şimdi RenkYazdir da neden shape oluşturuluyor?
olay server-client arası resim transferi ise neden böyle karmaşık bir yapı kurguladınız ki,doğrudan dosya transferi yada byte dizisiyle aktarım daha kolay olmaz mıydı?
Re: Resim Pixeli Analiz Ederken Yavaşlık..
Çok Teşekkürrr ederimmmmm, scanline ile böyle bi örnege ulaşamamıştım dün gün boyu araştırma yaparken, çok teşekkür ederim. Kodunuzu inceliycem hemen deneme yapıcam, takıldıgım noktalarda size yine sorular yöneltebilirimm.. Çok teşekkür ederimm ilginiz için. Ellerinize saglık..mrmarman
Şuan da en büyük sorun resmin pixellerini ayırıştırırken yavaş olması. resmi shape ile yeniden oluşturma safhası şimdilik test gibi, yani oluşturdugum kodun saglaması gibi bişey diyim. Çünkü benim ilk başta sorunsuz olarak performanslı bi şekilde bu stringi oluşturmam lazım. İşte bu stringi oluştururken yavaş oluyo bu olay. Sizin verdiginiz örnekleri deniycem şimdi.Buradaki hatan direkt görsel bir ortama taşımaya çalışmandan dolayı her adımda görsel işlemin sonucunu bekliyor olmandan kaynaklı. Yani resmi bileşenlerine ayırmaya kadar sorun yok diyebilirim.
Kod: Tümünü seç
1 Okunan := pByteArray( Image1.Picture.Bitmap.Scanline[i] );
2 Satir := '';
3 while j < 32 do begin
4 case Okunan[j] of
5 $F9 : RenkKodu := 'R';
6 $FB : RenkKodu := 'Y';
7 $00 : RenkKodu := 'B';
8 //clLime : RenkKodu := 'G';
burada $F9 $FB renk kodlarımı oluyor? Yukarıdaki kodunuzda satır sayısı olarak numaralandırdım daha rahat anlatabiliyim diye sorumu. 1. satırda scanline ile satır'ı mı alıyorsunuz? ve 4.satırda Okunan[j] diyerek o satıra ait sutunları mı anlıyorsunuz? scanlinede anlamakta güçlük çektigim nokta burası.. Birde 8.satırda clLime e, 5,6,7. satırlarda diger renklere vermiş oldugunuz gibi nasıl kod verebilirim, bi listesi mi var, adı ne oluyor bunların?
Re: Resim Pixeli Analiz Ederken Yavaşlık..
Sorularını cevplayım o zaman.
* 1. satırdaki Scanline ile istediğimiz herhangi bir satırı topluca alarak bir diziye atıyoruz. Bu işlem 1024 pixel genişliğinde de olsa, 32 pixel de olsa çok kısa zamanda gerçekleşen bir operasyon.
* 4.satırda Okunan[j] dediğimizde diziye aldığımız noktaları "j" numaralı sıradaki yani sütundaki nokta özelliğini okuyoruz.
* Diziye aldığımız değerleri 16'lık sayı düzeninde değerlendiriyorum. Siz bunları 10'luk tabanlı rakamlarla da ifade edebilirsiniz. Benim için kodlaması ve anlamlandırması kolay olması açısından 16'lık düzeni tercih ediyorum. $F9 $FB gibi değerleri nasıl elde ediyoruz, Format( '%.2x', [ Okunan[j] ]); içeriğini bir memo beya message dialog ile ekrana yansıtırsanız, okunan rengin karşılığını 16'Lık düzende okumuş olurunuz. Siz de uygun olan rengi ilgilenmek üzere portföyünüze alırsınız.
* cmLime için ise sizin örnekte buna ilişkin renk içeriği olmadığından remark altında vermiştim. Madem merak ettiniz, aynı şekilde sorgularsanız $FA sayısını elde edersiniz. şeklinde sorgulara ekleyebilirsiniz.
başarılar.
Cevaplarken sorularının yerini değiştirirsem daha uygun olacak.@neu84 yazdı:Şimdi bakınca sorma gereksinimi duydugum bişeyler var,
burada $F9 $FB renk kodlarımı oluyor? Yukarıdaki kodunuzda satır sayısı olarak numaralandırdım daha rahat anlatabiliyim diye sorumu. 1. satırda scanline ile satır'ı mı alıyorsunuz? ve 4.satırda Okunan[j] diyerek o satıra ait sutunları mı anlıyorsunuz? scanlinede anlamakta güçlük çektigim nokta burası.. Birde 8.satırda clLime e, 5,6,7. satırlarda diger renklere vermiş oldugunuz gibi nasıl kod verebilirim, bi listesi mi var, adı ne oluyor bunların?
* 1. satırdaki Scanline ile istediğimiz herhangi bir satırı topluca alarak bir diziye atıyoruz. Bu işlem 1024 pixel genişliğinde de olsa, 32 pixel de olsa çok kısa zamanda gerçekleşen bir operasyon.
* 4.satırda Okunan[j] dediğimizde diziye aldığımız noktaları "j" numaralı sıradaki yani sütundaki nokta özelliğini okuyoruz.
* Diziye aldığımız değerleri 16'lık sayı düzeninde değerlendiriyorum. Siz bunları 10'luk tabanlı rakamlarla da ifade edebilirsiniz. Benim için kodlaması ve anlamlandırması kolay olması açısından 16'lık düzeni tercih ediyorum. $F9 $FB gibi değerleri nasıl elde ediyoruz, Format( '%.2x', [ Okunan[j] ]); içeriğini bir memo beya message dialog ile ekrana yansıtırsanız, okunan rengin karşılığını 16'Lık düzende okumuş olurunuz. Siz de uygun olan rengi ilgilenmek üzere portföyünüze alırsınız.
* cmLime için ise sizin örnekte buna ilişkin renk içeriği olmadığından remark altında vermiştim. Madem merak ettiniz, aynı şekilde sorgularsanız $FA sayısını elde edersiniz.
Kod: Tümünü seç
$FA : RenkKodu := 'G';
başarılar.
Re: Resim Pixeli Analiz Ederken Yavaşlık..
Çok teşekkür ederim açıklamanız için.
Kodlara bakıyorum, çalıştıyorum ancak bi sorun var, scanline ile okumak istedigimde sizin uygulamanızda, şu şekilde aşagıdaki gibi noktlar çıkıyor. söylediginiz gibi clLime ın kodunu $FA : RenkKodu := 'G'; şeklinde ekledim ancak nedense böyle bi çıktı alıyorum. yanyana ikitane ok çıkıyor, ama öyle dgil, bitane ok çıkması lazım.. hemen altta pixels ile yapmış oldugunuz örnegin çıktısı var, o çok düzgün çıkıyor, ancak scanline olan böyle sorunlu. bi çok şey denedim ama ama bütün resimlerde böyle çift çıkarıyor.
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBB.BBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBB..BBBBBBBBBBBBBB.BBBBBBBB
BBBBBB...BBBBBBBBBBBBBB..BBBBBBB
BBBBBB....BBBBBBBBBBBB...BBBBBBB
BBBBB.....BBBBBBBBBBBB....BBBBBB
BBBBB......BBBBBBBBBB.....BBBBBB
BBBB.......BBBBBBBBBB......BBBBB
BBBBBB...BBBBBBBBBBB.......BBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBBBBBBBBBBBBBBBBBB...BBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
Pixels ile yapılmış ögreniginiz.
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbgbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbgggbbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbgggggggbbbbbbbbbbbbb
bbbbbbbbbbbgggggggggbbbbbbbbbbbb
bbbbbbbbbbgggggggggggbbbbbbbbbbb
bbbbbbbbbgggggggggggggbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Kodlara bakıyorum, çalıştıyorum ancak bi sorun var, scanline ile okumak istedigimde sizin uygulamanızda, şu şekilde aşagıdaki gibi noktlar çıkıyor. söylediginiz gibi clLime ın kodunu $FA : RenkKodu := 'G'; şeklinde ekledim ancak nedense böyle bi çıktı alıyorum. yanyana ikitane ok çıkıyor, ama öyle dgil, bitane ok çıkması lazım.. hemen altta pixels ile yapmış oldugunuz örnegin çıktısı var, o çok düzgün çıkıyor, ancak scanline olan böyle sorunlu. bi çok şey denedim ama ama bütün resimlerde böyle çift çıkarıyor.
Ancak sizin yazdıgınız tarzın dışında başka kabul etmiyor, $E101F0 : RenkKodu := 'B' yazdım ama kabul etmedi.Diziye aldığımız değerleri 16'lık sayı düzeninde değerlendiriyorum. Siz bunları 10'luk tabanlı rakamlarla da ifade edebilirsiniz.
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBB.BBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBB..BBBBBBBBBBBBBB.BBBBBBBB
BBBBBB...BBBBBBBBBBBBBB..BBBBBBB
BBBBBB....BBBBBBBBBBBB...BBBBBBB
BBBBB.....BBBBBBBBBBBB....BBBBBB
BBBBB......BBBBBBBBBB.....BBBBBB
BBBB.......BBBBBBBBBB......BBBBB
BBBBBB...BBBBBBBBBBB.......BBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBB...BBBBBBBBBBBBB...BBBBBBB
BBBBBBBBBBBBBBBBBBBBBB...BBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
Pixels ile yapılmış ögreniginiz.
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbgbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbgggbbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbgggggggbbbbbbbbbbbbb
bbbbbbbbbbbgggggggggbbbbbbbbbbbb
bbbbbbbbbbgggggggggggbbbbbbbbbbb
bbbbbbbbbgggggggggggggbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbgggggbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb