delphi4arab منتديات دلفي للعرب

نسخة كاملة : المقارنة بين صورتين ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبكاته

[COLOR="Red"]1- كيف يمكنني المقارنة بين صورتين ؟
2- رسم الناتج المقارنة في Timage ؟
[/COLOR]
توضيح اكثر :
لديا المكونات التالية :
Image1 : موجودا فيها الصورة الاولى .
Image2 : موجود فيها الصورة التانية .
Image3 : وصعتها لنرسم فيها اوجه الاختلاف .
Button1 : لعملية المقارنة .

كما يوجد في المرفق .

في امان الله
السلام عليكم ورحمة الله وبركاته

قمت بالبحت ووجدت هدا الكود :

PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
  
b1, b2: TBitmap;
  
c1, c2: PByte;
  
x, y, i,
  
different: Integer; // Counter for different pixels
begin
  b1 
:= Image1.Picture.Bitmap;
  
b2 := Image2.Picture.Bitmap;
  
Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal
  
different := 0;
  for 
y := 0 to b1.Height - 1 do
  
begin
    c1 
:= b1.Scanline[y];
    
c2 := b2.Scanline[y];
    for 
x := 0 to b1.Width - 1 do
      for 
i := 0 to BytesPerPixel - 1 do // 1, to 4, dep. on pixelformat
      
begin
        Inc
(different, Integer(c1^ <> c2^));
        
Inc(c1);
        
Inc(c2);
      
end;
  
end;
end; 

[COLOR="Red"]لكن هدا الكود لا يعيد المساحة المختلف فيها بين الصورتين ؟
فكيف لي ان افعل دالك ؟
هل هاته الطريقة سريعة ام توجد ماهي اسرع منها ؟[/COLOR]

بارك الله فيكم وعليكم وسلام عليكم
وعليكم السلام ورحمة الله وبركاته

اخي عبد المالك تفضل الحل في المرفق .

لقد قمت مفارنة الصورتين بكسل بكسل وحفض البكسلات المختلفة في مصفوفة + لون دالك البكسل .
السطر التالي ياتيك بالبكسل المحدد بـ X و
Y
PHP كود :
image1.Picture.Bitmap.Canvas.Pixels[i,j]; 
هل من تطوير لهدا الكود ليصبح اسرع وديناميكي ؟اقصد الكود الموجود في المرفق .

بالتوفيق للجميع ,,
إقتباس :الكود ليصبح اسرع وديناميكي ؟
1- طالع جيدا حول DoubleBuffered
كود :
http://delphi.about.com/library/bluc/text/uc092700a.htm http://www.programmersheaven.com/mb/delphikylix/303998/303998/doublebuffer-property/
مثال لحل مشكلة بـ DoubleBuffered هنا:
http://www.delphi4arab.net/forum/showthr...p?tid=6219
ابحث عن المزيد...
2- حاول دائما كتابة صنف (نمط)
PHP كود :
type
   TImageCompare 
= class
   
BitmapSource: TBitmap;
   
BitmapDest: TBitmap;
   ...
end; 
بالتوفيق.
بارك الله فيك وعليك
الله ينورك اخي العزيز ....
سوف احاول مراجعة الامور حول DoubleBuffered وليا رجعة.