이미지를 지속적으로 업데이트하고 이미지로 렌더링하는 writeablebitmap을 사용하려고합니다. 그러나 이미지의 상단 만 표시되고 중간 및 하단 2/3가 검정입니다. 필자는 writeablebitmap이 bgr24이고 이미지가 rgb24이므로 PixelFormat과 관련이있을 것이라고 생각합니다. 이것이 내가 현재하고있는 일입니다.WPF 이미지 상단에 1/3 만 표시됩니다.
int bufferSize = videoRenderer.VideoWidth * videoRenderer.VideoHeight;
byte[] frameBuffer = new byte[bufferSize];
Marshal.Copy(videoRenderer.Bitmap.BackBuffer, frameBuffer, 0, bufferSize);
using (Bitmap frame = new Bitmap(videoRenderer.VideoWidth, videoRenderer.VideoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb))
{
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, videoRenderer.VideoWidth, videoRenderer.VideoHeight);
BitmapData bmpData = frame.LockBits(rect, ImageLockMode.ReadWrite, frame.PixelFormat);
Marshal.Copy(frameBuffer, 0, bmpData.Scan0, bufferSize);
frame.UnlockBits(bmpData);
IntPtr hBitmap = frame.GetHbitmap();
source = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
DeleteObject(hBitmap);
}
무언가가 끔찍하게 잘못 보이거나 픽셀 형식 일 가능성이 큽니다. 그리고 pixelformat이라면, 어떻게하면 파란색과 적색을 바꾸기 위해 C#의 각 픽셀을 통과할까요?
writeablebitmap의 backbufferstride를 확인하면 1920이 반환됩니다. 비트 맵의 비트 맵 데이터는 1920과 같이 스트라이드를 반환합니다. – bl4kh4k
스트라이드가 일치하면 문제가 먼저 발생하지 않는지 확인합니다. 쓰기 가능한 비트 맵은 어떻게 업데이트됩니까? 어쩌면 비디오를 제공하는 소스와 쓰기 가능한 비트 맵간에 차이가있을 수 있습니다. –
videoRenderer는 1920 년 writeablebitmap을 보유하는 사용자 정의 객체입니다. – bl4kh4k