проблема с загрузкой картинки с камеры canon на компьютер - PullRequest
1 голос
/ 26 сентября 2010

я подключил камеру eos canon к ПК
У меня есть приложение, которое я мог бы сделать снимок удаленно, и загрузить изображение на ПК,

но когда я вынимаю SD-карту из камеры, я не могу загрузить изображение из буфера на ПК

// регистрация objceteventcallback

err = EDSDK.EdsSetObjectEventHandler(obj.camdevice, EDSDK.ObjectEvent_All, objectEventHandler, new IntPtr(0));
              if (err != 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;
        }

Кто-нибудь может мне помочь, почему это событие не вызывает,

или как я загружаю изображение из буфера на компьютер без SD-карты на моей камере

спасибо

Ответы [ 3 ]

2 голосов
/ 19 июля 2011

Вы, вероятно, столкнулись с той же проблемой, что и я вчера: камера пытается сохранить изображение для последующей загрузки, не находит карту памяти для сохранения и мгновенно сбрасывает изображение.

Чтобы получить вашеДля обратного вызова, вам нужно настроить камеру на сохранение изображений на ПК (kEdsSaveTo_Host) в какой-то момент во время процедуры инициализации камеры.В C ++ это работало так:

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

Для этого вам, вероятно, нужно создать IntPtr.По крайней мере, именно это сделал Дмитрий Прозоровский (подсказанный неким акадунно ) в этой теме .

0 голосов
/ 16 апреля 2013

Вопрос требует C #, но в Java нужно установить свойство как:

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);

А обычная загрузка сделает

0 голосов
/ 26 сентября 2010

SDK (насколько я знаю) только выставляет событие фотографирования в виде объекта, создаваемого в файловой системе камеры (то есть на SD-карте).Нет способа, которым я знаком, чтобы захватить из буфера.В некотором смысле это имеет смысл, потому что в среде, где имеется только небольшой объем встроенной памяти, важно сохранять энергозависимую память чистой, чтобы она могла продолжать фотографировать.После того, как буфер был сброшен в энергонезависимую память, вы можете взаимодействовать с этими байтами.Ограничение, я знаю, но это то, что есть.

...