2013-04-16 16 views
7

IP Kameradan video akışı elde etmek için yönetilmeyen kütüphaneler kullanıyorum. işlevi vardır:Winform kontrol boyutunu yönetilmeyen kod içine aktaramazsınız

pClientInfo
[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 
    ); 

bir yapı tipine işaretçidir: hPlayWnd video akışı çıkışı olması gereken pencere bir sap olup

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
protected struct LiveConnect 
{ 
    public UInt32 dwChannel; 
    public IntPtr hPlayWnd; 
    public UInt32 dwConnectMode; 
} 

. Kütüphane, video çözünürlüğünü bu pencerenin boyutuna göre belirler (arama sırasında Network_ClientStartLive). Çıkış penceresinin Picture control olduğu ve MoveWindow yöntemiyle boyut ayarının çıkış çözünürlüğünün tanımlandığı C++ MFC programında kontrol ettim.

Bu programın C# sürümünde, video akışını çizmek için PictureBox -control kullanıyorum. Video görüntülenir, ancak PictureBox'un boyutu video akışı çözünürlüğünü etkilemez.

 
[DllImport("user32.dll")] 
private static extern bool SetWindowPos(
    IntPtr hWnd, 
    IntPtr hWndInsertAfter, 
    int x, 
    int y, 
    int width, 
    int height, 
    uint uFlags); 
denetimin boyutu değiştirildi Her iki yöntemde de

ancak kamera kütüphane çıkışına devam etti:

  1. WinAPI SetWindowPos kullanılarak pictureBox.Size
  2. ayarı: Ben PictureBox boyutunu değiştirmek için çeşitli yöntemler denedi maksimum çözünürlükte video akışı.

    Bu sorunu nasıl çözebilirim?

    Teşekkürler!

+0

Bir başarısızlık modu düşünemiyorum, bir .NET PictureBox ile yönetilmeyen bir kodun hiç umursayamayacağı veya görmediği bir yönetilmeyen resim denetimi arasında temelde hiçbir şey yoktur. Yanlış pencere tanıtıcısını geçme olasılığını düşünün. Formun veya masaüstünün (boş) gibi. Destek için kamera kütüphanesi satıcısına veya yazara başvurun, kolayca hata ayıklayabilirler. –

+6

Ayrıca tanıtıcı yanlış olduğundan şüpheleniyorum. Bir günlüğe geçirdiğiniz tanıtıcıyı yazın ve uygulamanız çalışırken, resim kutusunu seçmek için Spy ++ yardımcı programını kullanın. Spy ++ tanıtıcı, oturum açtığınız tanıtıcıyla eşleşmezse, bir şey olduğunu bilirsiniz. – dazedandconfused

cevap

1

Windows Forms'taki her denetimin SizeChanged (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.sizechanged(v=vs.110).aspx) olayı vardır. Bu olay işleyicisinde video çözünürlüğünü manuel olarak değiştirmek için kod eklemeniz mümkün müdür? Aksi halde, sağladığınız PictureBox işleci, yönetilmeyen kütüphanenin ne arayacağıyla ilgili WM_SIZE iletileri göndermiyor olabilir. Yorumlardan birinde belirtildiği gibi, Spy ++ (Visual Studio ile birlikte verilir) iletileri izlemek ve tanıtıcı değerlerin ve olayların olmasını beklediğiniz şey olduğundan emin olmak için yararlı bir program olacaktır.