⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getpicturedlg.cpp

📁 canon 相机SDK,非常难得
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		goto	camerr;
	}
	
	/* Listing of volume is ended. */
	err = CDEnumVolumeRelease( hEnumVol );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	m_CFile.ResetContent();
	/* The items in a DCIM directory are enumerated. */
	cdHEnum			hEnumImage;
	cdHImageItem	hImage;
	cdItemInfo		SItemInfo;
	int				index;
	
	err = CDEnumImageItemReset( hItem, 2, cdENUM_HAS_THUMBNAIL, &hEnumImage );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	index = 0;
	while( (err = CDEnumImageItemNext( hEnumImage, &hImage )) == cdOK )
	{
		/* The information on an image is acquired. */
		err = CDGetItemInfo( hImage, &SItemInfo );
		if( GETERRORID(err) != cdOK )
		{
			CDEnumItemRelease( hEnumImage );
			goto	camerr;
		}
		
		/* It checks in an image item. */
		if( SItemInfo.Type&cdITEM_TYPE_IMAGE_ITEM )
		{
			m_CFile.AddString( SItemInfo.Name );
			/* The handle of an item is related with the list box. */
			m_CFile.SetItemData( index, (DWORD)hImage );
			index++;
		}
	}
	
	if( GETERRORID(err) != cdENUM_NA )
	{
		CDEnumItemRelease( hEnumImage );
		goto	camerr;
	}
	
	err = CDEnumImageItemRelease( hEnumImage );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	m_CConnect.EnableWindow( FALSE );
	m_CDisconnect.EnableWindow( TRUE );
	m_CThumbnail.EnableWindow( TRUE );
	m_CPicture.EnableWindow( TRUE );

	return;

camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	
	if( m_hSource )
	{
		CDUnlockUI( m_hSource );
		CDCloseSource( m_hSource );
		m_hSource = NULL;
	}
	
}

void CGetPictureDlg::OnGetthumbnail() 
{
	// TODO: Add your control notification handler code here
	cdError			err;
	int				index;
	cdHImageItem	hImage;
	
	/* The handle of the item chosen is acquired. */
	index = m_CFile.GetCurSel();
	if( index==LB_ERR )
	{
		MessageBox( "The image is not chosen." );
		return;
	}
	hImage = (cdHImageItem)m_CFile.GetItemData( index );
	
	CString CFileName;
	m_CFile.GetText(index, CFileName);

	CFileDialog		CGetPath(	FALSE,
								NULL,
								CFileName,
								OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_OVERWRITEPROMPT,
								"All Files (*.*)|*.*||",
								this );
	
	/* The path which saves a file is acquired. */
	if( CGetPath.DoModal() != IDOK )
	{
		return;
	}

	CString		CSavePath;
	CSavePath = CGetPath.GetPathName();
	
	/* UI is locked so that information may not be changed. */
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	cdHImageData	hImgData;
	cdStgMedium		MyMedium;
	char			szPath[MAX_PATH];
	
	/* Image data is acquired. */
	err = CDOpenImage( hImage );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	err = CDGetThumbnail( hImage, &hImgData );
	if( GETERRORID(err) != cdOK )
	{
		CDCloseImage( hImage );
		goto	camerr;
	}
	
	strcpy( szPath, CSavePath );
	MyMedium.Type = cdMEMTYPE_FILE;
	MyMedium.u.lpszFileName = szPath;
	
	err = CDGetImageData( hImgData, &MyMedium, NULL, NULL, 0 );
	if( GETERRORID(err) != cdOK )
	{
		CDCloseImage( hImage );
		goto	camerr;
	}
	
	err = CDCloseImage( hImage );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;
	
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	
	CDUnlockUI( m_hSource );
	
}

void CGetPictureDlg::OnGetpicture() 
{
	// TODO: Add your control notification handler code here
	cdError			err;
	int				index;
	cdHImageItem	hImage;
	
	/* The handle of the item chosen is acquired. */
	index = m_CFile.GetCurSel();
	if( index==LB_ERR )
	{
		MessageBox( "The image is not chosen." );
		return;
	}
	hImage = (cdHImageItem)m_CFile.GetItemData( index );
	
	CString	CFileName;
	m_CFile.GetText(index, CFileName);
	
	CFileDialog		CGetPath(	FALSE,
								NULL,
								CFileName,
								OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_OVERWRITEPROMPT,
								"All Files (*.*)|*.*||",
								this );
	
	
	/* The path which saves a file is acquired. */
	if( CGetPath.DoModal() != IDOK )
	{
		return;
	}
	CString	CSavePath;
	CSavePath = CGetPath.GetPathName();
	
	/* UI is locked so that information may not be changed. */
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}	
	
	cdHImageData	hImgData;
	cdStgMedium		MyMedium;
	char			szPath[MAX_PATH];
	
	/* Image data is acquired. */
	err = CDOpenImage( hImage );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	err = CDGetPicture( hImage, &hImgData );
	if( GETERRORID(err) != cdOK )
	{
		CDCloseImage( hImage );
		goto	camerr;
	}
	
	strcpy( szPath, CSavePath );
	MyMedium.Type = cdMEMTYPE_FILE;
	MyMedium.u.lpszFileName = szPath;
	
	err = CDGetImageData( hImgData, &MyMedium, NULL, NULL, 0 );
	if( GETERRORID(err) != cdOK )
	{
		CDCloseImage( hImage );
		goto	camerr;
	}
	
	err = CDCloseImage( hImage );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;
	
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	
}

void CGetPictureDlg::OnEnd() 
{
	// TODO: Add your control notification handler code here
	cdError	err;
		
	/* The lock of UI is canceled. */
	if( m_hSource )
	{
		if( m_hCallbackFunction )
		{
			/* The function which receives the event from a camera is canceled. */
			err = CDUnregisterEventCallbackFunction( m_hSource, m_hCallbackFunction );
			if( GETERRORID(err) != cdOK )
			{
				goto	camerr;
			}
			m_hCallbackFunction = NULL;
		}
		
		/* A device is closed. */
		err = CDCloseSource( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		m_hSource = NULL;
	}
	
	EndDialog( 0 );
	return;
	
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	
	if( m_hCallbackFunction )
	{
		CDUnregisterEventCallbackFunction( m_hSource, m_hCallbackFunction );
		m_hCallbackFunction = NULL;
	}
	CDCloseSource( m_hSource );
	m_hSource = NULL;
	
	EndDialog( 0 );
}

void CGetPictureDlg::OnDisconnect() 
{
	// TODO: Add your control notification handler code here
	cdError			err;
	
	m_CFile.ResetContent();
	
	if( m_hSource )
	{
		if( m_hCallbackFunction )
		{
			/* The function which receives the event from a camera is canceled. */
			err = CDUnregisterEventCallbackFunction( m_hSource, m_hCallbackFunction );
			if( GETERRORID(err) != cdOK )
			{
				goto	camerr;
			}
			m_hCallbackFunction = NULL;
		}
		
		/* A device is closed. */
		err = CDCloseSource( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		m_hSource = NULL;
	}
	
	m_CDisconnect.EnableWindow( FALSE );
	m_CThumbnail.EnableWindow( FALSE );
	m_CPicture.EnableWindow( FALSE );
	m_CConnect.EnableWindow( TRUE );
	
	return;
 
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	
}

void CGetPictureDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your control notification handler code here
	/* End processing of CDSDK is performed. */
	cdError		err;
	char		szErrStr[256];
	
	err = CDFinishSDK();
	if( GETERRORID(err) != cdOK )
	{
		wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
		MessageBox( szErrStr );
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -