質問

私として1つのものを優先番号1:

はライブビューを使用VB.NET をキヤノンEDSDK2.5.2および描画するので出力されるので、Windows Formsアプリ。現在、私はそうとするとその写真ボックス;しかし、住所】高知県高知市大川筋を提案した。

第二のオプションは少なくとも、ライブビューでストリームの映像出力のカメラをモニタです。

ていきたいと思っておりますの達成の最初のは、ちょっと素敵でした。以下は現在の私の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する

CameraクラスがslnCamliftControllerである/ SRC / Camera.vb

このコードの一部はあきれるほどひどいです。例えば、それは5Dと7Dカメラのために仕事を得るために、私はSDKを初期化して、目的にクラッシュするプログラムを作成する必要があります。ひどいです!知っている!これはKlugesaurusで発見されました。それはあなたが何も動作、5Dや7Dに接続しようとするようなものです。そこにスパイクのピットがあります。だから我々は(それは静かに失敗した)彼を殺し、スパイクに農民(Klugesaurus)を突き出すので、私たちは安全に農民の死体を歩いて渡ることができます。

これは醜いと恐ろしいですが、: それはすべての時間を動作します。 あなたがそれをしない場合、それは動作しません。 彼らは完全に5Dと7Dに接続EOSユーティリティ、のソースコードをリリースする場合、私はキヤノンを複数回求めています。彼らはしっかりとそれぞれの時間を拒否しています。私の同僚は、彼らが、あまりにも、Klugesaurusを使用していることを明らかにしたくないことをジョーク。 とにかく、私はちょうどその厄介な細部まであなたに頭を与えたいと思っています。

私はまた、カメラとのインタフェースにPythonモジュールを作成しました: http://github.com/superjoe30/pyedsdkする

コードサンプルここと、それをacomplishingの異なる方法に関する議論があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top