Hej alle!
Jeg vil gerne lave et program der tager to .BMP filer med samme
størrelse og finder forskellene på disse. For at teste det har jeg
Billede1.bmp, et almindelig billede fra Paint, og Billede2.bmp, som er
en Billede1.bmp med en ekstra sort streg. Mit program henter så de to
billeder ind i hver deres TImage, Image1 & Image2, det fungerer fint. Så
har jeg Image3, som er "Outputtet".
Jeg tager hver pixel og sammenligner. forskellen printes så ud - pixel
for pixel - på Image3. Jeg får bare Integer Overflow på linien
"Image3.Canvas.Brush.Color := I4 - I3;".
Hvad er der galt - og hvordan reparerer jeg fejlen?
Jeg bruger Delphi 6 Personal, og min kode er som følger:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
I: Integer;
I2: Integer;
I3: LongWord;
I4: LongWord;
begin
Image1.Picture.LoadFromFile(Edit1.Text);
Image1.AutoSize := True;
Image2.Picture.LoadFromFile(Edit2.Text);
Image2.AutoSize := True;
If (Image1.Width <> Image2.Width) Or (Image1.Height <> Image2.Height)
Then
MessageDlg('Hovsa! Width & Height ikke ens!', mtError, [mbOK], 0)
Else Begin
Image3.Width := Image1.Width;
Image3.Height := Image1.Height;
For I := 0 To Image1.Height Do Begin
For I2 := 0 To Image1.Width Do Begin
Image3.Canvas.MoveTo(I2, I);
//ShowMessage(IntToStr(GetPixel(Image1.Canvas.Handle, I2, I)) +
#13#10 + IntToStr(GetPixel(Image2.Canvas.Handle, I2, I)));
I3 := GetPixel(Image1.Canvas.Handle, I2, I);
I4 := GetPixel(Image2.Canvas.Handle, I2, I);
If (I3 <> I4) > (I4 <> I3) Then
Image3.Canvas.Brush.Color := I3 - I4
Else
Image3.Canvas.Brush.Color := I4 - I3;
Image3.Canvas.LineTo(I2, I);
End; {For}
Application.ProcessMessages;
End; {For}
Image1.Visible := False;
Image2.Visible := False;
Image3.Visible := True;
End; {If}
end;
--
Mvh. Mathias | @: mathias *der* *bor* *på* mrside *i* dk 1
http://www.vitoo.dk/ - alle tiders community site 2
1234567890123456789012345678901234567890123456789012345678901234567890 3