SDK에서 BGR 픽셀 형식 (예 : BGRBGRBGR
)이있는 이미지를 얻습니다. 다른 응용 프로그램의 경우이 형식을 RGB 평면 RRRGGGBBB
으로 변환해야합니다.BGR을 RGB 평면 픽셀 형식으로 신속하게 변환
저는 C# .NET 4.5 32 비트를 사용하고 있으며 데이터는 같은 크기의 바이트 배열입니다.
지금 배열 소스를 반복하고 BGR
값을 대상 배열의 적절한 위치에 할당하고 있지만 너무 길어 (1,300 만 화소 이미지의 경우 180ms). 코드가 실행되는 프로세서는 MMX, SSE, SSE2, SSE3, SSSE3에 액세스 할 수 있습니다.
전환 속도를 높이는 방법이 있습니까?
편집 :
// the array with the BGRBGRBGR pixel data
byte[] source;
// the array with the RRRGGGBBB pixel data
byte[] result;
// the amount of pixels in one channel, width*height
int imageSize;
for (int i = 0; i < source.Length; i += 3)
{
result[i/3] = source[i + 2]; // R
result[i/3 + imageSize] = source[i + 1]; // G
result[i/3 + imageSize * 2] = source[i]; // B
}
편집 : 여기 내가 사용하고 변환이 내가 세 루프, 각 채널 하나에 소스 배열에 대한 액세스를 분할했지만, 정말 도움이되지 않았다. 그래서 나는 제안에 개방적이다.
for (int i = 0; i < source.Length; i += 3)
{
result[i/3] = source[i + 2]; // R
}
for (int i = 0; i < source.Length; i += 3)
{
result[i/3 + imageSize] = source[i + 1]; // G
}
for (int i = 0; i < source.Length; i += 3)
{
result[i/3 + imageSize * 2] = source[i]; // B
}
질문에 답할 수 없기 때문에 범프. 모든 조언은 매우 감사드립니다!
원래 변환을 사용할 수 없을 때 더 빠른 변환이 가능하면 누구나 볼 수 없습니다. – Sayse
현재 접근 방식에 대한 코드를 보여주십시오. – HimBromBeere
다시 투표하십시오. 진지하게, 그는 도서관을 요구하지 않고있다. 코드가 주어 졌을지라도 나는 그것을 재 작성함으로써 속도를 높이는 두 가지 방법을 볼 수 있습니다. .NET 프레임 워크/타사 라이브러리가없는 Visual Studio 표준 에코 시스템에는 이에 대한 유효한 대답이 있습니다. – TomTom