c# - 如何有效地转换 IList到字节[]?
问题描述
我在有效地将一个转换IList<byte>
为byte[]
. 我正在使用 Xamarin Studio 和 OpenCV 来处理图像和 Fotoapparat 来拍照。我想将列表转换为数组,因为 OpenCV 需要一个数组而不是列表。我知道用 转换的“简单”方法ToArray()
,但它需要太多时间(转换超过 8-9 秒)。作为参考,myIList<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);
}
推荐阅读
- python - Web在python中抓取一个xml页面?
- python - 如何在 Jupyter 单元上运行 PIP 安装命令
- git - Fedora-33 上的 git(1) CLI 在创建 SSH 密钥对并将其添加到 Azure DevOps(或 GitHub)后请求密码 - (以下步骤)
- node.js - GCP Cloud Run 503 错误:长时间运行请求的服务不可用
- memory - SceneKit 高内存使用率
- r - 如何使用特定的列顺序计算累积和?
- c++ - GNU makefile 中过滤器的必要性
- php - 在 laravel 中写入 oauth 密钥文件的安全位置
- php - 从动态下拉菜单 PHP 将数据更改发布到数据库
- java - 本地计算机和服务器之间的行为差异