加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 在Windows Phone 8上将图像数据缓冲区传递给Windows运行

发布时间:2020-12-14 02:20:42 所属栏目:Windows 来源:网络整理
导读:我正在尝试找到一种有效的方法将图像数据缓冲区传递到 Windows Phone 8上的Windows运行时组件,从而最大限度地减少需要复制缓冲区数据的次数.之前已经提出了类似但更一般的问题: 见Passing images from Windows (Phone) Runtime Components (c++/cx) to Nati
我正在尝试找到一种有效的方法将图像数据缓冲区传递到 Windows Phone 8上的Windows运行时组件,从而最大限度地减少需要复制缓冲区数据的次数.之前已经提出了类似但更一般的问题:

见Passing images from Windows (Phone) Runtime Components (c++/cx) to Native c++ Algorithms

背景

有关该主题的MSDN文章可以在here找到.它建议使用WriteableBitmap,它可以将底层像素缓冲区公开为IBuffer对象,这允许本机组件就地操作数据而不首先复制缓冲区.

见How to get access to WriteableBitmap.PixelBuffer pixels with C++?

但是,WriteableBitmap所属的Windows.UI.Xaml.Media.Imaging命名空间不适用于Windows Phone 8,仅适用于Windows 8.而是可以使用System.Windows.Media.Imaging.WriteableBitmap,但它只提供访问权限以int []的形式向图像像素数据.将此转换为IBuffer的一种方法是:

using System.Windows.Media.Imaging;
using System.Runtime.InteropServices.WindowsRuntime;

private static IBuffer AsBuffer(WriteableBitmap bitmap)
{
  int[] p = bitmap.Pixels;
  int len = p.Length * 4;
  byte[] arr = new byte[len];
  Buffer.BlockCopy(p,arr,len);
  return arr.AsBuffer(); // Part of System.Runtime.InteropServices.WindowsRuntime
}

但它涉及不必要的缓冲区复制.

另一方面,根据MSDN article,传递字节数据数组有其缺点.基本上,在Windows运行时,参数既可以用于输入也可以用于输出,而不是两者,这意味着最终需要进行一些复制.

寻求答案

>如何通过Windows运行时层有效传递图像数据?
>传递图像和传递视频流时,哪些RT类适合?简单数组还是更复杂的缓冲区?

解决方法

本机代码的相机api是要走的路:
http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj571202

您将直接在您的c WinRT组件代码中获取数据.
看一个例子:
http://library.developer.nokia.com/Community/Wiki/Getting_started_with_the_Camera_APIs_for_native_code

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读