SharpDX.Databoxをビットマップに変換せずに反転させるにはどうすればよいですか? SharpDXとMedia Foundationを使用して画面を録画しています。以下は、私がデータボックスを入手する方法のコードです。SharpDX MapSubresourceが垂直に反転されているC#
mapSource = device.ImmediateContext.MapSubresource(screenTexture, 0,SharpDX.Direct3D11.MapMode.Read, SharpDX.Direct3D11.MapFlags.None);
しかし、私はmediafoundation.netでのMapSourceを通過したとき、私は垂直方向の映像を制作。あなたのコードで
IMFSample sample = null;
IMFMediaBuffer buffer = null;
IntPtr data = new IntPtr();
int bufferMaxLength;
int bufferCurrentLength;
int hr = (int)MFExtern.MFCreateMemoryBuffer(frameSizeBytes, out buffer);
if (Succeeded(hr)) hr = (int)buffer.Lock(out data, out bufferMaxLength, out bufferCurrentLength);
if (Succeeded(hr))
{
hr = (int)MFExtern.MFCopyImage(data, videoWidth * BYTES_PER_PIXEL, mapSource.DataPointer, videoWidth * BYTES_PER_PIXEL, videoWidth * BYTES_PER_PIXEL, videoHeight);
}
if (Succeeded(hr)) hr = (int)buffer.Unlock();
if (Succeeded(hr)) hr = (int)buffer.SetCurrentLength(frameSizeBytes);
if (Succeeded(hr)) hr = (int)MFExtern.MFCreateSample(out sample);
if (Succeeded(hr)) hr = (int)sample.AddBuffer(buffer);
if (Succeeded(hr)) hr = (int)sample.SetSampleTime(frame.prevRecordingDuration.Ticks);//(TICKS_PER_SECOND * frames/VIDEO_FPS);
if (Succeeded(hr)) hr = (int)sample.SetSampleDuration((frame.recordDuration-frame.prevRecordingDuration).Ticks);
if (Succeeded(hr)) hr = (int)sinkWriter.WriteSample(streamIndex, sample);
if (Succeeded(hr)) frames++;
COMBase.SafeRelease(sample);
COMBase.SafeRelease(buffer);
私はあなたがC + +プログラマだと思います。しかし、私はあなたの解決策を試みます。結果を教えてくださいありがとうございました。 – kripto
'MFExtern'を使用します。これはC#コードのMediaFoundationのC関数をマッピングするためのラッパーです。 'MFExtern.MFGetStrideForBitmapInfoHeader'を見つけてみてください。 –
申し訳ありませんが、まだ出力を正しく行うことはできません。私はメディアファンデーションの専門家ではありません。私のポストに添付ファイルがあるように、イメージのソースはすでに反転されていますが、リンクの名前を変更するのを忘れてしまいました。あなたは一番下にそれを見ることができます。私は実際に使用することができます – kripto