2013-04-16 5 views
7

में Winform नियंत्रण आकार को पास नहीं कर सकता मैं आईपी कैमरा से वीडियो स्ट्रीम प्राप्त करने के लिए अप्रबंधित पुस्तकालयों का उपयोग करता हूं। समारोह है:अप्रबंधित कोड

[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 के प्रकार की संरचना करने के लिए सूचक है:

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

जहां hPlayWnd खिड़की, जिसमें वीडियो स्ट्रीम उत्पादन होना चाहिए की एक संभाल है। लाइब्रेरी इस विंडो के आकार से वीडियो रिज़ॉल्यूशन का पता लगाती है (कॉल के दौरान Network_ClientStartLive)। मैंने इसे सी ++ एमएफसी प्रोग्राम पर चेक किया, जहां आउटपुट विंडो Picture control है और विधि MoveWindow के साथ आकार सेट करके आउटपुट वीडियो रिज़ॉल्यूशन परिभाषित किया गया था।

इस कार्यक्रम के सी # संस्करण में मैं वीडियो स्ट्रीम खींचने के लिए PictureBox -control का उपयोग कर रहा हूं। वीडियो प्रदर्शित होता है लेकिन PictureBox का आकार वीडियो स्ट्रीम रिज़ॉल्यूशन को प्रभावित नहीं करता है। मैं कई तरीकों की कोशिश की PictureBox आकार बदलने के लिए:

 
[DllImport("user32.dll")] 
private static extern bool SetWindowPos(
    IntPtr hWnd, 
    IntPtr hWndInsertAfter, 
    int x, 
    int y, 
    int width, 
    int height, 
    uint uFlags); 

दोनों तरीकों नियंत्रण के आकार बदल गया था में लेकिन कैमरा पुस्तकालय उत्पादन के लिए जारी रखा:

  1. WinAPI SetWindowPos का उपयोग कर pictureBox.Size
  2. की स्थापना अधिकतम रिज़ॉल्यूशन में वीडियो स्ट्रीम।

    मैं इस समस्या को कैसे हल कर सकता हूं?

    धन्यवाद!

+0

मैं विफलता मोड के बारे में नहीं सोच सकता, एनईटी पिक्चरबॉक्स और एक अप्रबंधित तस्वीर नियंत्रण के बीच मूलभूत रूप से कुछ भी नहीं है, जहां तक ​​अप्रबंधित कोड कभी भी देखभाल या देखेगा। इस संभावना पर विचार करें कि आप गलत विंडो हैंडल पास कर रहे हैं। प्रपत्र या डेस्कटॉप की तरह (शून्य)। समर्थन के लिए कैमरा पुस्तकालय विक्रेता या लेखक से संपर्क करें, वे आसानी से इसे डीबग कर सकते हैं। –

+6

मुझे यह भी संदेह है कि हैंडल गलत है। एक लॉग पर गुजरने वाले हैंडल को लिखें और जब आपका ऐप चल रहा है, तो चित्र बॉक्स का चयन करने के लिए Spy ++ उपयोगिता का उपयोग करें। यदि हैंडल स्पाइ ++ आपके द्वारा लॉग इन किए गए हैंडल से मेल नहीं खाता है, तो आपको पता चलेगा कि कुछ ऊपर है। – dazedandconfused

उत्तर

1

विंडोज़ फॉर्म में प्रत्येक नियंत्रण में साइज चेंज (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.sizechanged(v=vs.110).aspx) ईवेंट होता है। शायद इस घटना हैंडलर में वीडियो रिज़ॉल्यूशन को मैन्युअल रूप से बदलने के लिए कोड जोड़ना संभव है? यदि नहीं, तो आपके द्वारा प्रदान किए गए पिक्चरबॉक्स हैंडल WM_SIZE संदेशों को नहीं भेज रहे हैं जो अप्रबंधित लाइब्रेरी की तलाश में होंगे। जैसा कि टिप्पणियों में से एक में बताया गया है, स्पाइ ++ (विजुअल स्टूडियो के साथ शामिल) संदेश की निगरानी करने और यह सुनिश्चित करने के लिए एक उपयोगी कार्यक्रम होगा कि हैंडल मूल्य और घटनाएं आप उन्हें उम्मीद करते हैं।

संबंधित मुद्दे