iki image nesnesinde bulunan resimler aynı mı_?_?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
yyurday
Üye
Mesajlar: 7
Kayıt: 28 Tem 2010 04:01

iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen yyurday »

iki adet image nesnesine aynı resimleri ekledim bunlarıda kontrol ettiriyorum fakat bir türlü olmuyor, aynı resim olasına rağmen label de resimler farklı yazıyor, kod şu şekilde

if image1.picture = image2.picture then
label.caption:='resimler aynı'
else
label.caption:='resimler farklı'
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen emin_as »

O karşılaştırma işlemi resimleri karşılaştırmaz. Resimlerin hafızadaki adreslerini karşılaştırı. Bunlar farklı komponentlar oldugundan her zaman farklı adresleri gösterecektir.

Bu resimleri pixel pixel karşılaştırman gerekir. Ancak o zaman resimlerin aynı olup, olmadıgını anlayabilirsin.

Aşagıdaki adreste resimler üzerinde satır satır nasıl işlem yapılacagını anlatılıyor.
http://www.efg2.com/Lab/ImageProcessing/Scanline.htm

Aşagıdaki sitede iki tane resmin nasıl karşılaştırılacagı anlatılıyor.
http://www.swissdelphicenter.ch/torry/s ... hp?id=1635
yyurday
Üye
Mesajlar: 7
Kayıt: 28 Tem 2010 04:01

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen yyurday »

Aşagıdaki sitede iki tane resmin nasıl karşılaştırılacagı anlatılıyor.
http://www.swissdelphicenter.ch/torry/s ... hp?id=1635[/quote]

bu sitedeki kodu çalıştıramadım bana
for i := 0 to BytesPerPixel - 1 do satırında hata verdi delphi 7 kullanıyorum BytesPerPixel buradaki hatayı nasıl giderebilirim _?_?_?
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen emin_as »

Araya aşagıdaki kodu ekle

Kod: Tümünü seç

BytesPerPixel: Integer;  // bytesperpixel i tanımla başka bir isimde olur farketmez
...
begin
  b1 := Image1.Picture.Bitmap;
  b2 := Image2.Picture.Bitmap;
  Assert(b1.PixelFormat = b2.PixelFormat);
  case b1.PixelFormat of
     pf8Bit: BytesPerPixel := 1;
     pf16Bit: BytesPerPixel := 2;
     pf24Bit: BytesPerPixel := 3;
     pf32Bit: BytesPerPixel := 4;
  end; 
yyurday
Üye
Mesajlar: 7
Kayıt: 28 Tem 2010 04:01

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen yyurday »

yardımların için teşekür ederim fakat benim işeme yaramadı çünkü bendeki resimler 40x40 boyutunda ve biri siyah diğeri kırmızı heriki image de bulunan resimleride eşit görüyor,
amacım image1 sürükleyerek image2 ye burakmak sürükle burak yapıyorum fakat image2 boşmu yada image2 de image1 resminin aynsımı var onu kontrol ettirmem gerekli aynı tavlaya benzer pulu sürükleyip burakma aynı pul ise üsütne koyacak, farklı ve tek pul ise kıracak buna benzer bir çalışma yapıyorum, sizin bunun için tavsiye edeceğiniz bir yöntem var mı?
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen SimaWB »

Aşağıdaki fonksiyonla iki Bitmap'i karşılaştırabilirsiniz (Delphi 5 kullanarak denedim):

Kod: Tümünü seç

function CompareBitmaps(const BitmapA, BitmapB:  TBitmap): boolean;
type
  TRGBTripleArray =  array[WORD] of TRGBTriple;
  pRGBTripleArray =  ^TRGBTripleArray;
var
  i   :  INTEGER;
  j   :  INTEGER;
  rowA:  pRGBTripleArray;
  rowB:  pRGBTripleArray;
begin
  BitmapA.PixelFormat := pf24bit;
  BitmapB.PixelFormat := pf24bit;

  Result := True;
  try
    for j := 0 to BitmapA.Height-1 do
    begin
      rowA := BitmapA.Scanline[j];
      rowB := BitmapB.Scanline[j];

      for i := 0 to BitmapA.width-1 do
        if (rowA[i].rgbtRed   <> rowB[i].rgbtRed) or
           (rowA[i].rgbtGreen <> rowB[i].rgbtGreen) or
           (rowA[i].rgbtBlue  <> rowB[i].rgbtBlue) then
         Raise Exception.Create('');
    end;
  except
    Result := False;
  end;
end;
Kullanımı:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CompareBitmaps(Image1.Picture.Bitmap, Image2.Picture.Bitmap) then
    ShowMessage('Aynı')
  else
    ShowMessage('Aynı değil');
end;
There's no place like 127.0.0.1
yyurday
Üye
Mesajlar: 7
Kayıt: 28 Tem 2010 04:01

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen yyurday »

sayin simaWB yardımların için teşekür ederim fakat bendeki resimler 40x40 boyutunda ve biri siyah diğeri kırmızı heriki image de bulunan resimleride eşit görüyor,
amacım image1 sürükleyerek image2 ye burakmak sürükle burak yapıyorum fakat image2 boşmu yada image2 de image1 resminin aynsımı var onu kontrol ettirmem gerekli aynı tavlaya benzer pulu sürükleyip burakma aynı pul ise üsütne koyacak, farklı ve tek pul ise kıracak buna benzer bir çalışma yapıyorum, sizin bunun için tavsiye edeceğiniz bir yöntem var mı?
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen emin_as »

O procedure deki different in kaç oldugunu kontrol ettin mi?
Farklı her nokta için different değişkeni bir artırılıyor.

Ayrıca izlediğin yol yanlış. O şekilde programlama yapmak gereksizdir. Değişken tanımlayıp, tahtanın durumunu değişkenlerde tut. Programı yazması da kolay olur, kontroller de basit olur.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen SimaWB »

yyurday yazdı:sayin simaWB yardımların için teşekür ederim fakat bendeki resimler 40x40 boyutunda ve biri siyah diğeri kırmızı heriki image de bulunan resimleride eşit görüyor,
amacım image1 sürükleyerek image2 ye burakmak sürükle burak yapıyorum fakat image2 boşmu yada image2 de image1 resminin aynsımı var onu kontrol ettirmem gerekli aynı tavlaya benzer pulu sürükleyip burakma aynı pul ise üsütne koyacak, farklı ve tek pul ise kıracak buna benzer bir çalışma yapıyorum, sizin bunun için tavsiye edeceğiniz bir yöntem var mı?
Ben de emin_as'ın yazdıklarına katılıyorum. Farklı bir yöntem kullanmalısın bence de. En azından Image'ları kontrol ederek gitmek istiyorsan TImage'ın Tag özelliğini kullanabilirsin. Mesela TImage'a kırmızı resmi yüklediğinde Tag=0, siyah resmi yüklediğinde de Tag=1 yap. Daha sonra Tag'ı kontrol ederek istersen resmi değiştir yada değiştirme....
There's no place like 127.0.0.1
yyurday
Üye
Mesajlar: 7
Kayıt: 28 Tem 2010 04:01

Re: iki image nesnesinde bulunan resimler aynı mı_?_?

Mesaj gönderen yyurday »

yardımlarınız için teşekür ederim bende değişken tanımlayarak yapma kararı aldım amacım image1.pucture=image2.picture gibi kullanımı varsa onu kullancaktım oda olmadı, neyse tekrar sağolun.
Cevapla