나는 매우 오랜 시간 동안 카메라에서 찍은 이미지를 검색하려고했습니다. SDK를 사용하여 사진을 찍을 수 있습니다 :EDSDK 2.9를 사용하여 Canon 카메라에서 사진 가져 오기
err = EDSDK.EdsSendCommand (cameraDev, EDSDK.CameraCommand_TakePicture, 0);
유효한 카메라 세션을 연 후에 이렇게합니다. 나는 (이 이미지를 검색하는) 그들 중 누구도 제대로 작동하지 여러 방법을 시도
public static uint stateEventHandler(uint inEvent, uint inParameter, IntPtr inContext)
{
switch (inEvent)
{
case EDSDK.StateEvent_JobStatusChanged:
Debug.WriteLine(String.Format("There are objects waiting to be transferred. Job status {0}", inParameter));
break;
case EDSDK.StateEvent_ShutDownTimerUpdate:
if (inParameter != 0)
Debug.WriteLine(String.Format("shutdown timer update: {0}", inParameter));
break;
default:
Debug.WriteLine(String.Format("StateEventHandler: event {0}, parameter {1}", inEvent, inParameter));
break;
}
return 0;
}
public static uint objectEventHandler(uint inEvent, IntPtr inRef, IntPtr inContext)
{
switch (inEvent)
{
case EDSDK.ObjectEvent_VolumeInfoChanged:
Debug.WriteLine("volume info changed");
#region retrieve volume info
EDSDK.EdsVolumeInfo volumeInfo;
err = EDSDK.EdsGetVolumeInfo(inRef, out volumeInfo);
if (err == EDSDK.EDS_ERR_OK)
{
switch (volumeInfo.StorageType)
{
case (uint)EDSDK.EdsStorageType.Non:
Debug.WriteLine("No card inserted");
break;
default:
case (uint)EDSDK.EdsStorageType.CF:
case (uint)EDSDK.EdsStorageType.SD:
if (volumeInfo.Access == (uint)EDSDK.EdsAccess.ReadWrite)
{
Debug.WriteLine(String.Format("Label: {0}, Max Capacity: {1}, Free Space: {2}",
volumeInfo.szVolumeLabel, volumeInfo.MaxCapacity, volumeInfo.FreeSpaceInBytes));
/*
err = EDSDK.EdsGetChildAtIndex(volumeInfo, 0, directoryList);
if (err != EDSDK.EDS_ERR_OK)
throw new Exception(String.Format("EdsGetChildAtIndex: " + err.ToString()));
*/
}
else
Debug.WriteLine(String.Format("Volume access rights: {0}", volumeInfo.Access));
break;
}
}
#endregion retrieve volume info
break;
case EDSDK.ObjectEvent_DirItemCreated:
downloadImage(inContext);
Debug.WriteLine("dir item created");
break;
default:
Debug.WriteLine(String.Format("ObjectEventHandler: event {0}", inEvent));
break;
}
return 0;
}
: 나는 또한 같이 이벤트에 대한
objectEventHandler과 stateEventHandler을 추가 한 . 접근 방법의 일부는 다음과 같습니다
http://tech.groups.yahoo.com/group/CanonSDK/message/1575
[http://stackoverflow.com/questions/3762530/take-picture-and-directly-save-image-to-pc-using-edsdk-2 -11]
[http://canonsdk.com/phpBB3/viewtopic.php?f=7 & & t = 94 = SID 7fcbe7ad6eadb399dbcb4b61a7333112]
것은 모두는 단지 코드 부분이고 , 내가 그것을 광산에 넣으려고 할 때 제대로 작동하지 않습니다. 아마도 나는 경험이 없기 때문입니다. memoryStreams에 t, 포인터가 그렇게. 내가 얻는 대부분의 오류는 스트림을 읽고 로컬 버퍼에 복사 할 때 스트림이 비어 있다고 말합니다.
누구나 사진을 찍어 디스크 (또는 메모리)에 다운로드하거나이 작업을 완료하는 데 필요한 견고한 접근법에 대한 전체 샘플 코드가 있습니까?
감사 페르난도
C++로 전환 하시겠습니까? – rossb83