Windows에서 이미지 데이터 버퍼를 Windows 런타임 구성 요소로 전달하는 효율적인 방법을 찾으려고합니다 8 버퍼 데이터가 필요한 횟수를 최소화합니다. 복사 할 수 있습니다.Windows Phone 8에서 이미지 데이터 버퍼를 Windows 런타임에 전달
이 Passing images from Windows (Phone) Runtime Components (c++/cx) to Native c++ Algorithms
배경
주제에 대한 MSDN 문서를 찾을 수 here를 참조하십시오 전에 유사하지만 좀 더 일반적인 질문은 질문하고있다. 기본 픽셀 버퍼를 IBuffer
개체로 노출 할 수있는 WriteableBitmap
을 사용하면 기본 구성 요소가 버퍼를 먼저 복사하지 않고 현재 위치에서 데이터를 조작 할 수 있습니다.
만 윈도우 8이 대신 하나, System.Windows.Media.Imaging.WriteableBitmap
를 사용할 수있는 윈도우 폰 8을 사용할 수 그러나 How to get access to WriteableBitmap.PixelBuffer pixels with C++?
의 WriteableBitmap
가의 일부입니다 Windows.UI.Xaml.Media.Imaging
네임 스페이스되지 볼 수 있지만 그것은 단지에서 이미지 픽셀 데이터에 대한 액세스를 제공합니다 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, 0, arr, 0, len);
return arr.AsBuffer(); // Part of System.Runtime.InteropServices.WindowsRuntime
}
그러나 불필요한 버퍼 복사가 필요합니다.
반면에 데이터 전달 바이트 배열은 MSDN article에 따라 단점이 있습니다. 기본적으로 Windows 런타임에서 매개 변수는 입력 또는 출력 중 하나이며 둘 다 결코 아닙니다. 결국 일부 복사가 필요함을 의미합니다.
구함 대답
- 어떻게 효율적으로 Windows 런타임 계층을 통해 이미지 데이터를 전달합니까?
- 이미지를 전달할 때와 비디오 스트림을 전달할 때 적합한 RT 클래스는 무엇입니까? 간단한 배열 또는 복잡한 버퍼? 네이티브 코드에 대한
해결하셨습니까? – tfzxyinhao
Windows Phone 8.1에서 'Windows.UI.Xaml.Media.Imaging.WriteableBitmap'을 사용할 수 있습니다. – gannaway