C# 怎么保存静态回调函数中的缓存数据:对摄像头传来的图像数据进行单独保存,求教
C# 如何保存静态回调函数中的缓存数据:对摄像头传来的图像数据进行单独保存,求教?
函数代码如下:
public static bool callbackData(int index, int mode, IntPtr data, int len, int w, int h)
{
if (data == null)
{
return false;
}
int nRet = 0;
nRet = SDKMfcDllEncapsulater.WP_IPC_Dec(index, data, len, buffer);
if (WP_IPC_NOERROR!=nRet)
{
return false;
}
nRet = SDKMfcDllEncapsulater.WP_IPC_DisplayFrame(index, buffer);
if (WP_IPC_NOERROR != nRet)
{
string Error = "DisplayFrame Failed: " + nRet.ToString();
return false;
}
return true;
}
因为静态函数中不能使用非静态变量,所以代码中的buffer是已经声明好的类的静态属性,在外部初始化大小为[width*height*4];
然而实际执行过程中发现buffer的值全为0;静态函数不能这么赋值?我试着在静态代码段中定义临时变量,然后对临时变量初始化来保存数据,但是执行时会报错~求解~感谢!
------解决思路----------------------
先赋值个初值,比如全部赋值成1,然后看执行完之后到底变什么了
------解决思路----------------------
这个我觉得对于你来说可能有点理论上的难度。这需要有点“自定义类型”的概念。
buffer当然必须是静态的,但是你返回了数据之后,必须把 buffer 中返回的数据拷贝出来保存。例如你可能写
保存,就是这里的 Add(obj) 语句,把数据保存到一个 public static List<MyCaptDataType> 类型定义的数据集合中。
------解决思路----------------------
buffer当然必须是静态的 -> buffer当然必须是这个静态方法中临时用一下,跟你的“保存”概念根本就不是同一个东西
函数代码如下:
public static bool callbackData(int index, int mode, IntPtr data, int len, int w, int h)
{
if (data == null)
{
return false;
}
int nRet = 0;
nRet = SDKMfcDllEncapsulater.WP_IPC_Dec(index, data, len, buffer);
if (WP_IPC_NOERROR!=nRet)
{
return false;
}
nRet = SDKMfcDllEncapsulater.WP_IPC_DisplayFrame(index, buffer);
if (WP_IPC_NOERROR != nRet)
{
string Error = "DisplayFrame Failed: " + nRet.ToString();
return false;
}
return true;
}
因为静态函数中不能使用非静态变量,所以代码中的buffer是已经声明好的类的静态属性,在外部初始化大小为[width*height*4];
然而实际执行过程中发现buffer的值全为0;静态函数不能这么赋值?我试着在静态代码段中定义临时变量,然后对临时变量初始化来保存数据,但是执行时会报错~求解~感谢!
------解决思路----------------------
先赋值个初值,比如全部赋值成1,然后看执行完之后到底变什么了
------解决思路----------------------
这个我觉得对于你来说可能有点理论上的难度。这需要有点“自定义类型”的概念。
buffer当然必须是静态的,但是你返回了数据之后,必须把 buffer 中返回的数据拷贝出来保存。例如你可能写
......
MyCaptDataType obj = new MyCaptDataType();
obj.DateTime = DateTime.Now;
obj.Datas = new byte[len];
Array.Copy(buffer, obj.Data, len);
dataList.Add(obj);
return true;
保存,就是这里的 Add(obj) 语句,把数据保存到一个 public static List<MyCaptDataType> 类型定义的数据集合中。
------解决思路----------------------
buffer当然必须是静态的 -> buffer当然必须是这个静态方法中临时用一下,跟你的“保存”概念根本就不是同一个东西