سؤال

أحاول أن أفعل 1 من شيئين، التفضيل رقم 1:

قم بتشغيل العرض المباشر باستخدام VB.NET و Canon Edsdk 2.5.2 وتقديم الإخراج الحي في تطبيق نماذج Windows. حاليا أحاول وضعه في مربع صورة؛ ومع ذلك، أنا منفتح على الاقتراحات بالتأكيد.

سيكون الخيار الثاني في تشغيل العرض المباشر على الأقل ويطرده عبر إخراج الفيديو على الكاميرا على الشاشة.

أريد حقا إنجاز الأول رغم ذلك! أدناه هو بلدي codeBase الحالي، مساعدة!

Private Sub btnStartLiveView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartLiveView.Click

    Dim err As Integer = EDS_ERR_OK


    Dim prop As Integer = EdsEvfOutputDevice.kEdsEvfOutputDevice_PC
    Dim proptype As Integer = EDSDKTypes.kEdsPropID_Evf_OutputDevice
    '// Stock the property.'
    Dim wkIntPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(prop))
    Marshal.StructureToPtr(prop, wkIntPtr, False)
    'send property/command to the camera'
    EdsSetPropertyData(model.getCameraObject(), proptype, 0, Marshal.SizeOf(prop), prop)

    Dim stream As IntPtr
    Dim outMemoryRef As IntPtr
    Dim evfImage As IntPtr

    err = EdsCreateMemoryStream(0, stream)

    If err = EDS_ERR_OK Then

        err = EdsCreateImageRef(stream, outMemoryRef) '(stream, evfImage)'

    Else

        Dim str As String = Hex(err)

        MessageBox.Show(str)

    End If

    If err = EDS_ERR_OK Then
        err = EdsDownloadEvfImage(model.getCameraObject(), evfImage)
    Else

        Dim str As String = Hex(err)

        MessageBox.Show("&H" & str & "L") ' Shows &H2CL which = ERR_FILE_FORMAT_NOT_RECOGNIZED'
    End If

    ' Get the Incidental Data of the Image'

    If err = EDS_ERR_OK Then

        Dim zoom As UInt32
        Dim point As IntPtr


        EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(zoom), zoom)

        EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(point), point)

    Else

        'MessageBox.Show(err.ToString())'

    End If


    Dim buffer(Marshal.SizeOf(stream)) As Byte

    Dim mStream As System.IO.Stream = New System.IO.MemoryStream(Marshal.SizeOf(stream))


    Dim gcTime As GCHandle = GCHandle.Alloc(0, GCHandleType.Pinned)
    Dim pTime As IntPtr = gcTime.AddrOfPinnedObject()
    Marshal.Copy(stream, buffer, 0, Marshal.SizeOf(stream))

    mStream.Write(buffer, 0, Marshal.SizeOf(stream))

    Me.PictureBox1.Image = Image.FromStream(mStream)

    EdsRelease(stream)
End Sub

لا يوجد حل صحيح

نصائح أخرى

كنت الشخص الذي نشر هذا السؤال في الأصل. أرى أن هناك آخرون هنا الذين ما زالوا يبحثون عن الإجابة. لقد قمت بنشر الحل الذي وصلناه أخيرا إلى مدونتي في http://www.overridepro.com/2009/06/28/canon-sdk-live-view/ .

هنا ملف .vb الذي أعرف كاميرا الفصل الذي يتيح لك القيام بأشياء أعلى مستوى مثل

Dim camera as New Camera
camera.EstablishSession()
camera.TakePicture("C:\path\to\save.jpg")
camera.StartLiveView(me.LiveViewPictureBox)
camera.StopLiveView()
camera.FlushTransferQueue()

أعتقد أنك قد تجد أنها مفيدة:

<snip>

على مر السنين تلقيت رسائل بريد إلكتروني متعددة للحصول على تحديثات إلى كتلة الكود هذه، والتي هي على Github كمصدر مفتوح:

http://github.com/superjoe30/camlift-controller.

فئة الكاميرا في slncamliftcontroller / src / camera.vb

بعض هذا الرمز أمر فظيع للغاية. على سبيل المثال، من أجل الحصول عليها للعمل من أجل الكاميرا 5D و 7D، يجب علي إنشاء برنامج تهيئة SDK ثم تعطل عن قصد. كريه! أنا أعرف! تم العثور على هذا في Klugesaurus. يبدو الأمر كما هو الحال عند محاولة الاتصال ب 5D أو 7D، لا شيء يعمل. هناك حفرة من المسامير هناك. لذلك نحن ندفع فلاح (Klugesaurus) على المسامير، مما أسفر عن مقتله (فشل بصمت)، حتى نتمكن من المشي عبر جسم الفلاح الميت للسلامة.

انها قبيحة ورهيبة، ولكن: إنه يعمل في كل مرة. إذا كنت لا تفعل ذلك، فإنه لا يعمل. لقد طلبت من الكنسي عدة مرات إذا كان سيقوم بإصدار التعليمات البرمجية المصدر للأداة المساعدة EOS، والتي تتصل 5D و 7D تماما. لقد رفضوا بقوة في كل مرة. نكت نكت زملاء العمل أنهم لا يريدون الكشف عنهم، أيضا، يستخدمون klugesaurus. على أي حال، أردت فقط أن أعطيك رؤساء حتى التفاصيل السيئة.

لقد قمت أيضا بإنشاء وحدة بيثون للواجهة مع الكاميرا:http://github.com/superjoe30/pyedsdk.

هناك عينات رمز هنا والمناقشات حول طرق مختلفة من تكبيرها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top