首页 > 解决方案 > 如何有效地转换 IList到字节[]?

问题描述

我在有效地将一个转换IList<byte>byte[]. 我正在使用 Xamarin Studio 和 OpenCV 来处理图像和 Fotoapparat 来拍照。我想将列表转换为数组,因为 OpenCV 需要一个数组而不是列表。我知道用 转换的“简单”方法ToArray(),但它需要太多时间(转换超过 8-9 秒)。作为参考,myIList<byte>的长度为 5564448。

有谁知道如何有效地转换IList<byte>byte[]

标签: c#opencvxamarin

解决方案


我找到了解决我自己问题的方法。也许将来有人会遇到同样的问题。以下解决方案:

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);
}

链接到FastJavaByteArray


推荐阅读