나는 비디오 플레이어를 만들기 위해 고심하고 있습니다. 나는 cpu isue 때문에 sharpdx sdk로 이미지를 그려야한다. 하지만 나는 돈이있다. 프레임을 바이트 배열로 가져옵니다. 이미지의 픽셀 형식은 BGRA32입니다. 나는 그것을 변환하기 위해 다음 코드를 썼다. 그러나 그것은 나에게 "값이 예상 범위 내에 들지 않는다"라는 오류를줍니다.어떻게하면 바이트 배열에서 Managed.Graphics.Direct2D.Bitmap 객체를 만들 수 있습니까? #
내 코드 :
private Bitmap getBitmap(byte[] frame) {
return RenderTarget.CreateBitmap(new SizeU((uint)img_w, (uint)img_h), frame, 0, new BitmapProperties(new PixelFormat(DxgiFormat.B8G8R8A8_UNORM, AlphaMode.Ignore), 100, 100));
}
참고 img_w = 720 img_h = 576, I는 우선 복사 데이터보다 이미지를 만드는 것이 시도 프레임 어레이의 길이 = 720 * 576 * 4
이미지. 그러나 그것은 또한 작동하지 않습니다. 첫 번째 행을 모든 행에 복사합니다.
왼쪽 이미지는 원본 이미지이며, 오른쪽은 바이트 배열에서 복사하여 만듭니다. 이 이미지를 만들기 위해 다음 코드를 사용했습니다.
private Bitmap getBitmap(byte[] frame) {
var bmp = RenderTarget.CreateBitmap(new SizeU((uint)img_w, (uint)img_h), IntPtr.Zero, 0, new BitmapProperties(new PixelFormat(DxgiFormat.B8G8R8A8_UNORM, AlphaMode.Ignore), 100, 100));
bmp.CopyFromMemory(new RectU(0, 0, (uint)img_w, (uint)img_h), frame, 0);
return bmp;
}
1) '프레임'에 예상 한 내용이 포함되어 있는지 확인 했습니까? 즉,보고있는 내용이 포함되지 않았는지 확인하십시오 (첫 번째 행이 반복됨). (두 번째 행이 첫 번째 행과 다르다는 것을 증명하기에 충분한 바이트 값을 출력하십시오.) 2) 임의의 바이트로 채우고 다시 한 행만 반복되는지보십시오. 3) 또한 새로운 비트 맵을 표시하는 코드 줄을 표시하십시오. 거기에 뭔가 잘못 될 수 있습니까? – ToolmakerSteve