filterInfo() { this.data = this.tableList.slice(0); if (this.tableList.length > 0) { //进行时间筛选 this.working = this.getworkinghours(this.workinghours); this.starttime = this.working.substring(0, 10); this.endtime = this.working.substring(13, 23); if (this.starttime != '' || this.endtime != '') { this.data = this.data.filter(item => { return this.starttime <= moment(item.bringoutdate).format('YYYY-MM-DD') && moment(item.bringoutdate).format('YYYY-MM-DD') <= this.endtime; }); } } },
时间: 2024-02-14 08:23:55 浏览: 127
这段代码的作用是将一个表格数据的副本 `slice(0)` 赋给 `this.data`,然后根据时间筛选条件 `this.starttime` 和 `this.endtime`,对 `this.data` 进行过滤操作,返回符合时间范围的数据。具体的分析如下:
首先,代码将原始的表格数据 `this.tableList` 的一个副本通过 `slice(0)` 方法复制给了 `this.data`,这么做是为了保证不会修改原始数据,同时得到一个新的数组,可以对其进行过滤操作。
接下来,代码判断了表格数据的长度,如果表格数据不为空,就对其进行时间筛选。时间筛选的条件是根据 `this.workinghours` 得到的工作时间计算出开始时间 `this.starttime` 和结束时间 `this.endtime`,然后将数组中的每个元素 `item` 分别与时间范围进行比较,如果符合条件,则将该元素加入到过滤后的数据中。
最终,代码返回过滤后的数据 `this.data`,包含了符合时间范围的表格数据。
相关问题
FilterInfoCollection videoDevices;//摄像头设备集合 VideoCaptureDevice videoSource;//捕获设备源 const int delaytime = 500; //扫码间隔时间 ms int totalTime; //扫码最长时间 public Form1() { InitializeComponent(); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { comboBox1.Items.Clear(); videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); for (int i = 0; i < videoDevices.Count; i++) comboBox1.Items.Add(videoDevices[i].Name); comboBox1.Text = comboBox1.Items[0].ToString(); } private void button2_Click(object sender, EventArgs e) { if (comboBox1.Text == null) return; videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString); videoSourcePlayer1.VideoSource = videoSource; videoSourcePlayer1.Start(); textBox1.Text = "开始识读"; timer1.Interval = delaytime; timer1.Start(); totalTime = 0; } private void timer1_Tick(object sender, EventArgs e) { if (totalTime >= 20000)// 最多读20秒 { timer1.Stop(); textBox1.Text = "未识别到条形码"; return; } Bitmap barcodeImage; barcodeImage = videoSourcePlayer1.GetCurrentVideoFrame();//拍摄 if (barcodeImage != null) { // 识读条形码 BarcodeReader reader = new BarcodeReader(); reader.Options.CharacterSet = "UTF-8"; reader.Options.PossibleFormats = new List<BarcodeFormat>() { BarcodeFormat.CODE_128 }; Result resultBarcode = reader.Decode(barcodeImage); if (resultBarcode != null) { textBox1.Text = ""; textBox1.AppendText(resultBarcode.Text); timer1.Stop(); return; } } totalTime += delaytime; textBox1.Text = totalTime.ToString() + " ms"; //if (totalTime == 3000) // picture.Save("测试图片.bmp");怎么设置锁定后置摄像头不打开前置摄像头
要想实现锁定后置摄像头,不打开前置摄像头,可以在获取摄像头设备源时,指定后置摄像头的设备。具体实现方法如下:
1. 获取所有视频设备的集合
```
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
```
2. 遍历视频设备集合,找到后置摄像头对应的设备
```
foreach (FilterInfo device in videoDevices)
{
if (device.Name == "后置摄像头名称")
{
videoSource = new VideoCaptureDevice(device.MonikerString);
break;
}
}
```
3. 如果找到后置摄像头对应的设备,则使用该设备进行视频捕捉,否则提示用户没有找到后置摄像头
```
if (videoSource != null)
{
videoSourcePlayer1.VideoSource = videoSource;
videoSourcePlayer1.Start();
}
else
{
MessageBox.Show("没有找到后置摄像头!");
}
```
需要注意的是,不同手机的后置摄像头名称可能不同,需要根据具体手机进行调试和修改。同时,如果找不到后置摄像头对应的设备,则需要在代码中处理异常情况。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using AForge; using AForge.Controls; using AForge.Neuro; using AForge.Video; using AForge.Video.DirectShow; using static recharge.Form1; namespace recharge { public partial class Form1 : Form { FilterInfoCollection videoDevices;//摄像头设备集合 VideoCaptureDevice videoSource;//捕获设备源 public int selctedDeviceIndxe = 0; Bitmap img;//处理图片 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //先检测电脑所有的摄像头 videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); MessageBox.Show("检测到了" + videoDevices.ToString() + "个摄像头!"); } // CS0021.cs // compile with: /reference:CPP0021.dll private void pictureBox1_Click(object sender, EventArgs e) { } private void videoSourcePlayer1_Click(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); selctedDeviceIndxe = 0; videoSource = new VideoCaptureDevice(videoDevices[selctedDeviceIndxe].MonikerString); videoSource.VideoResolution = videoSource.VideoCapabilities[selctedDeviceIndxe]; videoSourcePlayer1.VideoSource = videoSource; videoSourcePlayer1.Start(); img = videoSourcePlayer1.GetCurrentVideoFrame(); } } }
根据您提供的代码,问题出现在 `videoSource = new VideoCaptureDevice(videoDevices[selctedDeviceIndxe].MonikerString);` 这一行,因为 `videoDevices` 是一个 `FilterInfoCollection` 类型的对象,而这个类型不支持通过方括号进行索引操作。
要解决这个问题,您可以使用 `videoDevices[selctedDeviceIndxe]` 的返回值来获取当前选中的 `FilterInfo` 对象,然后再使用它的 `MonikerString` 属性来创建 `VideoCaptureDevice` 对象。修改后的代码如下:
```
FilterInfo selectedDevice = videoDevices[selctedDeviceIndxe];
videoSource = new VideoCaptureDevice(selectedDevice.MonikerString);
videoSource.VideoResolution = videoSource.VideoCapabilities[selectedDevice];
```
这样就可以避免使用带有方括号的索引操作了。希望这可以帮助到您!
阅读全文