Ver Mensaje Individual
  #5  
Antiguo 23-03-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Gracias seoane,... si no fuera por tí... no se me hubiera ocurrido ver lo de CompareMem.
Recordé que la clase abstracta TTestCase de Dunit tiene implementado una función CheckEqualsMem. Me fijé en el código y noto que hace uso de CompareMem... y bueno se me prendió la lamparita.

Esto es la prueba correspondiente para determinar si dos imagenes son iguales con DUnit:

Código Delphi [-]
unit UTest;

interface

uses QExtCtrls, Graphics, TestFramework;

type
  TCasodePrueba = class(TTestCase)
  private
    Img1, Img2: TPicture;
  protected
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure PruebaIguales;
  end;

implementation

// esto para iniciar las pruebas....
procedure TCasodePrueba.SetUp;
begin
  Img1 := TPicture.Create;
  img1.LoadFromFile('Directorio de la imagen 1');
  Img2 := TPicture.Create;
  img2.LoadFromFile('Directorio de la imagen 2');
end;

// esto una vez que concluyen todas la pruebas
procedure TCasodePrueba.TearDown;
begin
  Img1.Free;
  img2.Free;
end;

// esta es la única prueba que tiene. Es ilustrativo
procedure TCasodePrueba.PruebaIguales;
var
    i,j: integer;
begin
  // esto para dimensiones... si no son iguales. Falla. en otro caso continua
  check((Img1.Bitmap.Width = Img2.Bitmap.Width) AND (img1.Height = 
// le sacamos al tamaño de memoria a comparar....
Img2.Bitmap.Height),'No tienen igual tamaño');
  case Img1.Bitmap.PixelFormat of
      pf16bit: j:= (img1.Bitmap.Width*2) -1;
      pf24bit: j:= (img1.Bitmap.Width*3) -1;
      pf32bit: j:= (img1.Bitmap.Width*4) -1;
      else j:= img1.Bitmap.Width -1;
    end;
// comparamos.... y si alguna linea es diferente... se falla. en otro caso se continua hasta que falle o termina. Termina = OK  
for i := 0 to img1.Bitmap.Height - 1 do
    CheckEqualsMem(Img1.Bitmap.ScanLine[i],Img2.Bitmap.ScanLine[i],j,'No son iguales');
end;

initialization
 // registramos el caso de prueba y dejamos al trabjo a DUnit
 TestFramework.RegisterTest(TCasodePrueba.Suite); 

end.

Espero que a mas de uno le sirva.
Saudos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita