Просмотр в реальном времени с помощью Canon EDSDK 2.5.2 VB.NET

StackOverflow https://stackoverflow.com/questions/895265

  •  23-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь сделать одну из двух вещей, предпочтение номер 1:

Включите просмотр в реальном времени с помощью VB.NET и Canon EDSDK 2.5.2 и визуализируйте вывод в реальном времени в приложении Windows Forms.Сейчас я пытаюсь поместить это в коробку с картинками;однако я точно открыт для предложений.

Второй вариант — как минимум включить Live View и транслировать его через видеовыход камеры на монитор.

Но мне очень хочется сделать первое!Ниже приведена моя текущая кодовая база, помогите!

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, в котором я определяю класс Camera, который позволяет вам делать такие вещи верхнего уровня, как

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

Класс Camera находится в slnCamliftController/src/Camera.vb.

Часть этого кода до неприличия ужасна.Например, чтобы заставить его работать с 5D и 7D камерой, мне нужно создать программу, которая инициализирует SDK, а затем специально вылетает.Ужасный!Я знаю!Это встречается у Клюгезавра.Это как при попытке подключиться к 5Д или 7Д ничего не получается.Там есть яма с шипами.Итак, мы пихаем крестьянина (Клюгезавра) на шипы, убивая его (он терпит неудачу бесшумно), чтобы мы могли пройти через труп крестьянина в безопасное место.

Это некрасиво и ужасно, но:Это работает каждый раз.Если вы этого не сделаете, это не сработает.Я несколько раз спрашивал Canon, выпустят ли они исходный код для EOS Utility, которая идеально подключается к 5D и 7D.Каждый раз они категорически отказывались.Мой коллега шутит, что они не хотят раскрывать, что тоже используют Клюгезавра.В любом случае, я просто хотел предупредить вас об этой неприятной детали.

Я также создал модуль Python для взаимодействия с камерой:http://github.com/superjoe30/pyedsdk

Есть примеры кода здесь и дискуссии о различных путях его достижения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top