アンマネージドライブラリを使用してIPカメラからビデオストリームを取得しています。 機能があります:Winformコントロールサイズをアンマネージコードに渡すことはできません
hPlayWnd
は、ビデオストリームを出力する必要があるウィンドウのハンドルです
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
protected struct LiveConnect
{
public UInt32 dwChannel;
public IntPtr hPlayWnd;
public UInt32 dwConnectMode;
}
:
[DllImport("client.dll", EntryPoint = "Network_ClientStartLive", SetLastError = true)]
protected static extern int Network_ClientStartLive(
ref IntPtr pStream,
IntPtr hDev,
IntPtr pClientInfo,
[MarshalAs(UnmanagedType.FunctionPtr)] ReadDatacbf lpfnCallbackFunc = null,
UInt32 dwUserData = 0
);
pClientInfo
は、の種類を構造体へのポインタです。 ライブラリーは、このウィンドウのサイズによってビデオ解像度を検出します(Network_ClientStartLive
の呼び出し中)。出力ウィンドウがPicture control
で、メソッドのサイズを設定することにより、出力ビデオ解像度が定義されたC++のMFCプログラムでチェックしました。
このプログラムのC#バージョンでは、ビデオストリームを描画するのにPictureBox
-controlを使用しています。ビデオは表示されますが、PictureBox
のサイズはビデオストリームの解像度に影響しません。 WinAPIのSetWindowPos
を用いpictureBox.Size
- :私は
PictureBox
サイズ変更するためにいくつかの方法を試みた
[DllImport("user32.dll")] private static extern bool SetWindowPos( IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int width, int height, uint uFlags);
を両方の方法でコントロールのサイズを変更したが、カメラライブラリを出力する継続しました最大解像度のビデオストリーム。
どうすればこの問題を解決できますか?
ありがとうございます!
私は失敗モードを考えることはできません。アンマネージドコードが気にかけたり見たりする限り、.NET PictureBoxとアンマネージドピクチャコントロールの間に基本的な違いはありません。間違ったウィンドウハンドルを渡している可能性を考慮してください。フォームやデスクトップのように(null)。カメラライブラリのベンダーまたは作成者にサポートを依頼すると、簡単にこれをデバッグできます。 –
私はまた、ハンドルが間違っていると思われます。あなたがログに渡しているハンドルを書き、あなたのアプリが実行されている間に、Spy ++ユーティリティを使ってピクチャボックスを選択します。ハンドルSpy ++がログに記録されたハンドルと一致しない場合は、何か起きていることがわかります。 – dazedandconfused