우리 ASIC에서 캡처 한 프레임을 재생하기 위해 비디오 플레이어를 쓰고 있습니다. 그것들은 사용자 정의 형식이며, ASIC 상태를 디코딩하는 기능이 제공되었습니다. 동영상의 크기는 640x480에서 2560x1200 (!!!)까지 가능합니다. 각 상태 사이클의 출력은 16x16 픽셀 블록으로, 화면에서 비디오로 들어가야합니다.WPF에서 비디오를 생성하고 그릴 수있는 가장 빠른 방법은 무엇입니까?
화면을 업데이트해야 할 때마다, 나는 다음과 같은 정보가 있습니다
- 블록 폭
- 블록 높이
- X 시작 블록의 좌표
- Y 블록의 좌표를 시작
- RGB32 픽셀 색상 정보의 1 차원 배열
개 주요 제한 :
- .NET 3.5
나는 다음과 같이 뭔가를 WriteableBitmap을 시도하고, 이미지의 소스로 사용하여이 아침 보냈다 안전하지 않은 코드 :
를private WriteableBitmap ImageSource;
public MainWindow()
{
InitializeComponent();
ImageSource = new WriteableBitmap(FrameWidth, FrameHeight, 96, 96, PixelFormats.Bgr32, null);
ImagePanel.Source = ImageSource;
}
private void DrawBox(byte Red, byte Green, byte Blue, int X, int Y)
{
int BoxWidth = 16;
int BoxHeight = 16;
int BytesPerPixel = ImageSource.Format.BitsPerPixel/8;
byte[] Pixels = new byte[BoxWidth * BoxHeight * BytesPerPixel];
for (int i = 0; i < Pixels.Length; i += 4)
{
Pixels[i + 0] = Blue;
Pixels[i + 1] = Green;
Pixels[i + 2] = Red;
Pixels[i + 3] = 0;
}
int Stride = BoxWidth * BytesPerPixel;
Int32Rect DrawBox = new Int32Rect(X, Y, BoxWidth, BoxHeight);
ImageSource.Lock();
ImageSource.WritePixels(DrawBox, Pixels, Stride, 0);
ImageSource.Unlock();
}
내 비디오가 작동하지만 작동하지만 sloooooooow입니다. 실시간 재생 속도가 거의 없습니다. 거기에 일련의 비트 맵을 절차 적으로 생성하는 것 외에 더 좋은 방법이 있습니까? D3Dimage에 대해 읽은 적이 있지만 3D 장면을 비트 맵으로 내보내는 것이 더 많은 것 같습니다. 여기에 제안이 있습니까?
DrawBox는 단색의 16 * 16 픽셀 블록을 만드는 것처럼 보입니다. 이 올바른지? –
WriteableBitmap.WritePixels 메서드 (Int32Rect, Array, Int32, Int32, Int32)를 사용하면 소스 잠금 및 잠금 해제를 사용할 필요가 없습니다. http://msdn.microsoft.com/en-us/library/cc490065.aspx – Gorgen
예 , DrawBox는 솔리드 컬러 블록을 그리기 위해 함께 사용했던 것입니다. 또한 Locking에 감사드립니다. 더 가까이 읽었어야했습니다. – Stevoman