我无法有效地将IList<byte>
转换为byte[]
。我正在使用Xamarin Studio和OpenCV来处理图像,使用Fotoapparat来拍照。
我想将列表转换为数组,因为OpenCV需要数组而不是列表。我知道使用ToArray()
进行转换的“简便”方法,但是它花费了太多时间(转换时间超过8-9秒)。作为参考,我的IList<byte>
的长度为5564448。
有人知道如何有效地将IList<byte>
转换为byte[]
吗?
答案 0 :(得分:0)
我找到了解决自己问题的方法。也许将来有人会有同样的问题。 解决方案如下:
internal static IntPtr javaClassHandle;
internal static IntPtr classRef
{
get
{
return JNIEnv.FindClass("io/fotoapparat/preview/Frame", ref javaClassHandle);
}
}
static IntPtr imageJFieldId;
public void ProcessFrame(Frame frame)
{
int bufferSize = frame.Image.Count;
var buffer = new byte[bufferSize];
if (imageJFieldId == IntPtr.Zero)
imageJFieldId = JNIEnv.GetFieldID(classRef, "image", "[B");
var fieldObject = JNIEnv.GetObjectField(frame.Handle, imageJFieldId);
var fastByteArray = new FastJavaByteArray(fieldObject);
fastByteArray.CopyTo(buffer, 0);
}