开发者

problem with download picture from canon camera to pc

i connected a eos canon camera to pc

i have an application that i could take picture remotly ,and download image to pc,

but when i remove the SD card from camera , i cant download image from buffer to pc

// register objceteventcallback

err = EDSDK.EdsSetObjectEventHandler(obj.camdevice, EDSDK.ObjectEvent_All, objectEventHandler, new IntPtr(0));
              if (err 开发者_JS百科!= EDSDK.EDS_ERR_OK)
                 Debug.WriteLine("Error registering object event handler");

///

public uint objectEventHandler(uint inEvent, IntPtr inRef, IntPtr inContext)
        {
            switch(inEvent)
            {

                case EDSDK.ObjectEvent_DirItemCreated:

                    this.getCapturedItem(inRef);

                    Debug.WriteLine("dir item created");

                    break;
                case EDSDK.ObjectEvent_DirItemRequestTransfer:
                    this.getCapturedItem(inRef);
                    Debug.WriteLine("file transfer request event");
                    break;

                default:
                    Debug.WriteLine(String.Format("ObjectEventHandler: event {0}", inEvent));
                    break;
            }
            return 0;
        }

anyone could help me , why this event does not call ,

or how i download image from buffer to pc, with out have Sd card on my camera

thanks


You probably ran into the same problem as I did yesterday: the camera tries to store the image for a later download, finds no memory card to store it to and instantly discards the image.

To get your callback to fire, you need to set the camera to save images to the PC (kEdsSaveTo_Host) at some point during your camera initialization routine. In C++, it worked like this:

    EdsInt32 saveTarget = kEdsSaveTo_Host;
    err = EdsSetPropertyData( _camera, kEdsPropID_SaveTo, 0, 4, &saveTarget );

You probably need to build an IntPtr for this. At least, that's what Dmitriy Prozorovskiy did (prompted by a certain akadunno) in this thread.


The SDK (as far as I know) only exposes the picture taking event in the form of the object being created on the file system of the camera (ie the SD card). There is not a way of which I am familiar to capture from buffer. In a way this makes sense, because in an environment where there is only a small amount of onboard memory, it is important to keep the volatile memory clear so that it can continue to take photographs. Once the buffer has been flushed to nonvolatile memory, you are then clear to interact with those bytes. Limiting, I know, but it is what it is.


The question asks for C#, but in Java one will have to setProperty as:

NativeLongByReference number = new NativeLongByReference( new NativeLong( EdSdkLibrary.EdsSaveTo.kEdsSaveTo_Host ) );
    EdsVoid data = new EdsVoid( number.getPointer() ); 
    NativeLong l = EDSDK.EdsSetPropertyData(edsCamera, new NativeLong(EdSdkLibrary.kEdsPropID_SaveTo), new NativeLong(0), new NativeLong(NativeLong.SIZE), data);

And the usual download will do

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜