2017-03-07 11 views
1

DirectShow 필터를 사용하여 웹캠에서 이미지를 가져 오려고합니다.
그 이미지를 PictureBox에 표시하고 싶습니다.
그 이미지를 회전해야합니다.IntPtr 버퍼에서 이미지를 만든 후 이미지를 뒤집어야합니다.

코드 샘플 :

public int BufferCB(double sampleTime, IntPtr pbuffer, int bufferLen) 
{ 
    if (pbuffer == IntPtr.Zero || bufferLen == 0) return 0; 
    var timeStamp = TimeSpan.FromSeconds(sampleTime); 
    var image = new Bitmap(_videoResolution.Width, _videoResolution.Height, _stride, PixelFormat.Format24bppRgb, pbuffer); 
    image.RotateFlip(RotateFlipType.Rotate180FlipX); 
    RaiseFrameGrabbedEvent(image, timeStamp, pbuffer); 
    return 0; 
} 

는 회전을 피할 수있는 방법이 있습니까.

답변

1

비디오 RGB 형식의 일반적인 행 순서가 반대로, 즉 맨 아래 이미지 인 경우 이미지를 뒤집어야합니다. Bitmap 클래스 생성자는 이미지 행을 위에서 아래로 가져옵니다.

뒤집은 이미지를로드하고 image.RotateFlip 전화를 걸어 수정할 수 있습니다.

또는 비트 맵 인스턴스에 행 단위로 이미지를로드하고 역순으로 이미지를로드 할 수 있습니다. 아마도 첫 번째 행에 대해 부정적인 보폭과 각각의 오프셋을 제공하면 (일부 API는이를 수용하고 다른 것은 수용하지 않음) 한 번에 해결할 수 있습니다.

네거티브 스트라이드가있는 RGB 형식을 사용하도록 샘플 그래버를 설정할 수 있습니다.이 경우 그래버 버퍼에 올바른 행 순서가 지정되지만 파이프 라인에 이러한 RGB 형식에 대한 특정 지원이 필요합니다 .

결국 대부분의 경우 앞에서 설명한 것처럼 이미지 데이터를 비트 맵에로드하거나 뒤집기를해야합니다.

+0

반전하면 CPU 사용량이 증가합니다. 그것을 줄일 수있는 방법이 있습니까? – iamyz