- Код: Выделить всё
- 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;
Всё работает, на движение реагирует адекватно, но слишком уж ресурсоёмко. С графикой дела никогда не имел, так что сделано всё довольно топорно и "на глазок". Буду очень рад советам опытных коллег ^_^




 Похоже что StretchDraw - основной тормоз, потому что 400 итераций для пикселей не так много. Понял, что StretchDraw используется как часть установки порога срабатывания. А что если:
 Похоже что StretchDraw - основной тормоз, потому что 400 итераций для пикселей не так много. Понял, что StretchDraw используется как часть установки порога срабатывания. А что если: Правда не уверен, что не будет воздействовать шум на изображении.
 Правда не уверен, что не будет воздействовать шум на изображении.


