private static void ImageSaved(object sender, ImageSavedArgs e) { imagesSaved.Add(e.image.ToString()); }
public static void camera_Alarm(object sender, CamIdArgs e, LevelArgs l) { List<object> lightSpikeResults; bool spike = new bool(); spike = false; int spikePerc = new int(); //are we filtering light spikes? if (!CameraRig.rig[e.cam].cam.triggeredBySpike && (bool)(CameraRig.rigInfoGet(bubble.profileInUse, CameraRig.rig[e.cam].cameraName, CameraRig.infoEnum.lightSpike))) { lightSpikeResults = statistics.lightSpikeDetected(e.cam, l.lvl, config.getProfile(bubble.profileInUse).timeSpike, config.getProfile(bubble.profileInUse).toleranceSpike, bubble.profileInUse, time.millisecondsSinceStart()); spike = (bool)lightSpikeResults[0]; spikePerc = (int)lightSpikeResults[1]; } //movement alarm was not previously triggered by a light spike //and a light spike has not been detected with the current alarm inducing movement //or we are not concerned about light spikes if ((!CameraRig.rig[e.cam].cam.triggeredBySpike && !spike) || CameraRig.rig[e.cam].cam.certifiedTriggeredByNonSpike || !(bool)(CameraRig.rigInfoGet(bubble.profileInUse, CameraRig.rig[e.cam].cameraName, CameraRig.infoEnum.lightSpike))) { CameraRig.rig[e.cam].cam.certifiedTriggeredByNonSpike = true; if (config.getProfile(bubble.profileInUse).areaOffAtMotion && !CameraRig.AreaOffAtMotionIsTriggeredCam(e.cam)) { CameraRig.AreaOffAtMotionTrigger(e.cam); bubble.areaOffAtMotionTriggered = true; } if (bubble.Alert.on && bubble.imageSaveTime(true)) { try { string fName = fileNameSet(config.getProfile(bubble.profileInUse).filenamePrefix, config.getProfile(bubble.profileInUse).cycleStampChecked, config.getProfile(bubble.profileInUse).startCycle, config.getProfile(bubble.profileInUse).endCycle, ref config.getProfile(bubble.profileInUse).currentCycle, true); Bitmap saveBmp = null; imageText stampArgs = new imageText(); stampArgs.bitmap = (Bitmap)CameraRig.rig[e.cam].cam.pubFrame.Clone(); stampArgs.type = "Alert"; stampArgs.backingRectangle = config.getProfile(profileInUse).alertTimeStampRect; saveBmp = timeStampImage(stampArgs); ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, config.getProfile(profileInUse).alertCompression); myEncoderParameters.Param[0] = myEncoderParameter; saveBmp.Save(bubble.imageFolder + fName, jgpEncoder, myEncoderParameters); Bitmap thumb = GetThumb(saveBmp); thumb.Save(thumbFolder + tmbPrefix + fName, ImageFormat.Jpeg); ImageThumbs.addThumbToPictureBox(thumbFolder + tmbPrefix + fName); saveBmp.Dispose(); thumb.Dispose(); ImageSavedArgs a = new ImageSavedArgs(); a.image = fName; ImageSaved(null, a); updateSeq++; if (updateSeq > 9999) { updateSeq = 1; } moveStatsAdd(time.currentTime()); logAddLine("Movement detected"); logAddLine("Movement level: " + l.lvl.ToString() + " spike perc.: " + Convert.ToString(spikePerc)); logAddLine("Image saved: " + fName); } catch (Exception) { logAddLine("Error in saving movement image."); updateSeq++; } } } else { //a light spike caused this alarm and we are catching light spikes if ((bool)(CameraRig.rigInfoGet(bubble.profileInUse, CameraRig.rig[e.cam].cameraName, CameraRig.infoEnum.lightSpike))) { CameraRig.rig[e.cam].cam.triggeredBySpike = true; } } }