Ver Mensaje Individual
  #17  
Antiguo 06-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Cada pixel esta compuesto por 3 bytes (depende del formato) uno para el rojo, otro para el verde y otro para el azul. Una solucion rapida pero poco elegante para tu codigo seria algo como esto:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  x,y : Integer;
  BitMap1, BitMap2 : TBitMap;
  A, B : PByteArray;
begin
  BitMap1 := TBitMap.create;
  BitMap2 := TBitMap.create;
  try
    BitMap1.LoadFromFile('000.bmp');
    BitMap2.LoadFromFile('111.bmp');
    BitMap1.PixelFormat:= pf24bit; // Nos aseguramos de que son 3 bytes por pixel
    BitMap2.PixelFormat:= pf24bit;
    for y := 0 to BitMap1.Height - 1 do
    begin
        A := BitMap1.ScanLine[y];
        B := BitMap2.ScanLine[y];

        for x := 0 to (BitMap1.Width*3) - 1 do // Aqui estaba el problema
        begin
            if A[x] <> B[x] then
              B[x] := 0;
        end;
    end;

    Image3.Picture.Graphic := BitMap2;
  finally
    BitMap1.Free;
    BitMap2.Free;
  end;
end;

La solucion que yo prefiero, es dejarse de arrays de bytes y usar punteros pero aqui cada uno como se sienta mas comodo.
Responder Con Cita