- Код: Выделить всё
Var
bBitmap: TBitmap;
bPicture: TPicture;
bMemoryStream: TMemoryStream;
bBuffer: TBitmap;
Procedure TForm1.Timer1Timer(Sender: TObject);
Var
aPixel, aBufferedPixel: TFPColor;
i, j, aDiff: Integer;
Begin
aDiff := 0;
bMemoryStream.Clear;
HttpGetBinary('http://admin:123456@192.168.0.243/snapshot.cgi', bMemoryStream);
bMemoryStream.Seek(0, soFromBeginning);
bPicture.Clear;
bBitmap.Clear;
bPicture.LoadFromStream(bMemoryStream);
bBitmap.SetSize(20, 20);
bBitmap.Canvas.StretchDraw(Rect(0, 0, 20, 20) , bPicture.Bitmap);
If bBuffer = nil Then
Begin
bBuffer := TBitmap.Create;
bBuffer.Assign(bBitmap);
Exit;
End;
For i := 0 To bBitmap.Width - 1 Do
For j := 0 To bBitmap.Height - 1 Do
Begin
aPixel := TColorToFPColor(bBitmap.Canvas.Pixels[i, j]);
aBufferedPixel := TColorToFPColor(bBuffer.Canvas.Pixels[i, j]);
If Abs(aPixel.blue - aBufferedPixel.blue) +
Abs(aPixel.red - aBufferedPixel.red) +
Abs(aPixel.green - aBufferedPixel.green) > 5000 Then
Inc(aDiff);
End;
Memo1.Lines.Insert(0, IntToStr(aDiff));
bBuffer.Assign(bBitmap);
End;
Всё работает, на движение реагирует адекватно, но слишком уж ресурсоёмко. С графикой дела никогда не имел, так что сделано всё довольно топорно и "на глазок". Буду очень рад советам опытных коллег ^_^