2011-04-12 3 views
0

블루투스를 통해 스트리밍 데이터를 수신하는 애플리케이션이 있고 이미지에 스트리밍 된 데이터를 표시하고 싶습니다. 데이터는 RGB 값 (RGB의 경우 0-255)입니다. 그것은 C#에서 잘 작동하지만 아이폰에서 똑같은 일을하는 데 문제가 있습니다. C#에서는 대기열로 구현됩니다. 새로운 데이터 행이 도착하면 한 행의 픽셀을 비 큐화 한 다음 새 픽셀 행을 큐에 넣습니다. 그런 다음 큐를 이미지 픽셀 배열에 씁니다. 이것은 전체 이미지를 읽거나, 그것을 이동하거나, 새로운 데이터를 추가하고, 픽셀 배열을 쓰는 것보다 빠르다. C#에는 대기열에 연속 메모리가 없기 때문에 대기열을 배열로 변환 할 수있는 메서드가 있습니다. 내 질문은 큐에서 배열을 수동으로 다시 채우는 것보다 빠른 방법이 있습니까? 아니면 대기열을 사용하는 것보다 빠른 방법이 있습니까? 이미지는 X 픽셀 수 아래로 이동 한 다음 X 픽셀의 새 픽셀을 이미지의 빈 부분에 씁니다. 어느 쪽이든, 첫 번째 값 외의 다른 것에 액세스하는 유일한 방법은 큐에서 값을 가져 오는 방법이므로 큐를 배열로 변환하는 방법을 알 수 없습니다. 어떤 제안?objective-c/objective-C++의 시프트 이미지 픽셀

+0

설명 된 패턴의 최적화 된 C# 버전을 요구하거나 Objective C++ 구현을 요구하고 있습니까? – Till

+0

objective-c 또는 objective-C++ 구현. – Davido

답변

0

iOS 장치의 병목 현상은 대기열을 배열로 변환하는 것이 아니라 장치의 디스플레이 (이미지 또는 텍스처) 메모리로 비트 맵 배열을 가져 오는 데 있습니다. 이 경로는 타일링 된 레이어를 사용하고 끝 타일의 끝에있는 픽셀 만 업데이트하여 최적화 할 수 있습니다. 그런 다음 스크롤 뷰 내부에서 타일링 된 레이어를 스크롤하여 최신 스트리밍 된 데이터를 정렬 할 수 있습니다.

+0

전에 타일 된 레이어를 사용한 적이 없습니다. 그것을 사용하는 방법을 보여주는 링크가 있습니까? 사과 개발자 웹 사이트에는 두 가지 예가 있지만 더 많은 정보가 있으면 항상 도움이됩니다. – Davido

+0

OpenGL을 사용하는 경우 : 마지막 WWDC에서 GL 토크가 GPU와 메모리를 공유하는 데 사용할 수있는 새로운 기능에 대해 토론했습니다. 더 많은 성능을 원하면 도움이 될 수 있습니다. – nielsbot