私はDX9レンダラーを作成しています。現在、AVIムービーファイルを再生する機能に取り組んでいます。私はパックされたDIBを返すAVIStreamGetFrame()
を使用して指定されたフレームを取得できました。そこから既にビットマップデータを既存のIDirect3DTexture9 *
にコピーできるようにしたいと思います。IDirect3DTexture9にBITMAPINFOHEADERイメージデータを書き込む
ビットマップファイル形式の理解が不十分で、BITMAPINFOHEADER
から与えられたピクセルデータをIDirect3DTexture9
が解釈できる形式に変換する方法を知っていません。
私が最初にこのように私のDX9テクスチャを作成します。私はここにある
LPBITMAPINFO bmpInfo = m_pVideoData->GetVideoFormat();
D3DXCreateTexture(LtGEngine::GetInstance()->GetDevice(),
bmpInfo->bmiHeader.biWidth,
bmpInfo->bmiHeader.biHeight,
D3DX_DEFAULT,
0,
D3DFMT_A8R8G8B8, // <- DETERMINE HOW?
D3DPOOL_MANAGED, // <- OR D3DPOOL_SYSTEMMEM?
&m_pD3DTexture);
質問は、上記のコメントとして記載されています。私はBITMAPINFOを取得し、例えばbmpInfo.bmiHeader.biBitCount = 8(または16など)を読み込むと、これはD3DFMT_ *をそれに応じて変更する必要があるということですか?
後でレンダリングするフレームにLPBITMAPINFOHEADER
が表示されたら、IDirect3DTexture9::LockRect()
関数から返されたpBits
の処理方法が失われます。これまで私がこれまで持っていたことは次のとおりです。
// Retrieve a frame from the video data as a BITMAPINFOHEADER
LPBITMAPINFOHEADER pBmpInfoHeader;
m_pVideoData->GetVideoFrame(0, 0, &pBmpInfoHeader);
D3DLOCKED_RECT rect;
if(FAILED(m_pD3DTexture->LockRect(0, &rect, NULL, 0)))
{
m_pD3DTexture->UnlockRect(0);
}
DWORD* pDest = (DWORD*)rect.pBits;
// Now what to copy from pBmpInfoHeader?
これは私には見られないAPIコールがありますか?それとも誰よりも簡単な方法を知っていますか?読んでいただきありがとうございます。
ありがとう:
は、ここでは、コードです。この解決策は、古いコードを修正するのに役立ちました。 –