C#使用TCP从IP摄像头读取所有数据
我有IP摄像头和 我无法从这台相机读取图像数据。 要读取图像,我必须向摄像头发送命令并读取: 1) 电报长度 2) 响应ID获取图像 3) 错误代码 4) 图像类型 5) 图像结果 6) 行数、列数 7) 图像数据 从第1点到第6点读取数据没有问题,因为这只有14个字节。 在第6点中,我读取了图像的大小。例如,让我们计算行数 列将是640x480,因此我们有307200字节 要读取图像,我正在使用Visual Studio 2010和WindowsForm应用程序 和操作窗体按钮:C#使用TCP从IP摄像头读取所有数据,c#,visual-studio,tcp,tcpclient,tcp-ip,C#,Visual Studio,Tcp,Tcpclient,Tcp Ip,我有IP摄像头和 我无法从这台相机读取图像数据。 要读取图像,我必须向摄像头发送命令并读取: 1) 电报长度 2) 响应ID获取图像 3) 错误代码 4) 图像类型 5) 图像结果 6) 行数、列数 7) 图像数据 从第1点到第6点读取数据没有问题,因为这只有14个字节。 在第6点中,我读取了图像的大小。例如,让我们计算行数 列将是640x480,因此我们有307200字节 要读取图像,我正在使用Visual Studio 2010和WindowsForm应用程序 和操作窗体按钮: privat
private void butReadImage_Click(object sender, EventArgs e)
{
// code to read data from point 1 to 6
// start read data image (point 7)
}
在butReadImage\单击我只能读取7000字节的图像数据
因为相机不会在一个包中发送所有图像数据。
要读取所有数据,我在中启用计时器(间隔1ms),但请单击然后使用
private void timReadImage_Tick(object sender, EventArgs e)
{
// read rest data form camera, about two data packets
int numberOfBytesRead;
while (rwSensorStream.DataAvailable)
{
numberOfBytesRead = rwSensorStream.Read(BinaryImageData_Byte_14_n, 0, BinaryImageData_Byte_14_n.Length);
tempRC = tempRC + numberOfBytesRead;
for (int i = 0; i < numberOfBytesRead; i++)
{
image.Add(BinaryImageData_Byte_14_n[i]);
}
}
}
private void timReadImage\u勾选(对象发送方,事件参数e)
{
//从相机读取rest数据,大约两个数据包
整数字节读取;
while(rwSensorStream.DataAvailable)
{
numberOfBytesRead=rwSensorStream.Read(二进制图像数据字节长度,0,二进制图像数据字节长度);
tempRC=tempRC+numberOfBytesRead;
for(int i=0;i
我现在知道这是使用计时器的错误代码。有人知道如何读取多个包中发送的所有数据吗 异步读取数据。您必须弄清楚while循环条件应该是什么,以便为单个映像循环正确的次数,但是等待ReadAsync从流中获取数据将允许代码在继续之前等待完整的传输
public async Task getData(NetworkStream rwSensorStream) {
while (true) {
byte[ ] buffer = new byte[numberOfBytesAtOnce];
int read = await rwSensorStream.ReadAsync(buffer, 0, buffer.Length);
//wait for next package
if (read > 0) {
// data received, process it
}
else break; // will occur when connection is broken
}
}
您可以1)阻塞当前正在执行的代码,直到读取所有数据;2)异步读取数据。