我在有效转换 IList<byte>
时遇到问题至 byte[]
.我正在使用带有 OpenCV 的 Xamarin Studio 来处理图像,并使用 Fotoapparat 来拍照。
我想将列表转换为数组,因为 OpenCV 需要一个数组而不是列表。我知道使用 ToArray()
进行转换的“简单”方法, 但它需要太多时间(转换超过 8-9 秒)。作为引用,我的IList<byte>
长度为 5564448。
有谁知道如何有效地转换IList<byte>
至 byte[]
?
最佳答案
我找到了解决我自己问题的方法。也许将来有人会遇到同样的问题。 以下解决方案:
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);
}
关于c# - 如何高效地将 IList<byte> 转换为 byte[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767512/