변환 BGRA 을 ARGB
-
11-12-2019 - |
문제
내가 읽기 이 튜토리얼 에 점점에서 픽셀 데이터를이 있습니다.
는 동안 나는 아무 문제가 실행 및 이 코드를 사용하여,내가 가져가야 할 필요가있의 출력 데이터를 카메라(에서 오는 BGRA)로 변환하 ARGB 그래서 나는 그것을 이용할 수 있습니다 외부 라이브러리입니다.어떻게 해야 하나요?
해결책
에 있는 경우 iOS5.0 사용할 수 있습니다 vImage 에서 가속화 프레임워크를 할 네온에 최적화된 색상 구성 요소 스왑 다음과 같은 코드를 사용하여 다음과 같은(에서 그려진 애플의 Webcore 에 소스 코드):
vImage_Buffer src;
src.height = height;
src.width = width;
src.rowBytes = srcBytesPerRow;
src.data = srcRows;
vImage_Buffer dest;
dest.height = height;
dest.width = width;
dest.rowBytes = destBytesPerRow;
dest.data = destRows;
// Swap pixel channels from BGRA to RGBA.
const uint8_t map[4] = { 2, 1, 0, 3 };
vImagePermuteChannels_ARGB8888(&src, &dest, map, kvImageNoFlags);
가 width
, height
, 고 srcBytesPerRow
에서 얻을 수 있습니다 당신의 픽셀 버퍼를 통해 CVPixelBufferGetWidth()
, CVPixelBufferGetHeight()
, 고 CVPixelBufferGetBytesPerRow()
. srcRows
것에 포인터를 기본 주소의 바이트는 픽셀 버퍼 destRows
것 메모리를 할당 출력 RGBA 이미지입니다.
이해야보다 훨씬 빠르게 단순히 반복 바이트와 스왑 색상 구성 요소입니다.
에 따라 이미지의 크기는 더 빠른 솔루션을 업로드하려면 프레임의 OpenGL ES,렌더링하고 간단한 장방형과 함께 이 질감으로 사용 glReadPixels()를 아래로 당겨 RGBA 값입니다.더 나은 것을 사용하 iOS5.0 의 질감을 캐시 모두를 위해 업로드 및 다운로드,이 프로세스를 단 1~3ms 에 대한 720 프레임에 아이폰 4.물론 사용하여,OpenGL ES 더 많은 것을 의미를 지원하는 코드를 풀이다.