下面的代码演示了如何将一个AVI文件DV
设备:
/ /多媒体工具包包括铅头188宝金博怎么下载
# include“ltmm.h”
# include“resource.h”
# include < tchar.h >
# include < stdio . h >
# include < assert.h >
实例句柄g_hInstance;/ /应用程序实例句柄
IltmmConvert * g_pConvert;/ /转换对象的接口指针
/ /用户定义消息id用于转换事件
#定义WM_CONVERTNOTIFY (WM_USER + 1000)
/ /
/ / ConvertDlgProc
/ /开始转换过程,并提供了状态反馈
/ /
/ /控制:
/ / IDC_CONVERTSTATUS -静态控制用于状态信息
/ / IDC_CONVERTPROGRESS -静态控制用于转换的进展
/ / IDC_USERABORT -按钮控件用来中止转换或退出对话框
BOOL调ConvertDlgProc (HWND HWND,使用UINT味精,按钮按钮,LPARAM LPARAM)
{
TCHAR sz [256];
bstr1型;
bstr2型;
HRESULT人力资源;
长状态;
长类型;
长流;
IltmmVCRControl * pVCR;
开关(味精)
{
情况下WM_INITDIALOG:
/ /分配通知窗口
g_pConvert - > SetNotifyWindow ((长hwnd, WM_CONVERTNOTIFY);
/ /设置中止按钮文本
SetDlgItemText (hwnd, IDC_USERABORT _T (“中止”));
/ /取消注释以下行DirectShow的GraphEdit查看图形
/ / g_pConvert - > EditGraph ();
g_pConvert - > get_UnrenderedStreams(流);
如果(流! = 0)
对话框(hwnd, _T (“并不是所有的流可能呈现。”),_T (“转换”),MB_ICONEXCLAMATION | MB_OK);
g_pConvert - > get_TargetVCRControl (&pVCR);
hr = pVCR - >记录();
pVCR - >释放();
如果(成功(人力资源)
睡眠(2000);
/ /启动转换
hr = g_pConvert - > StartConvert ();
如果(失败(人力资源)
{
_stprintf(深圳_T (“转换错误0 x % .8X”),lParam);
SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);
UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));
SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));
MessageBeep (0);
/ /停止,如果录像机
g_pConvert - > get_TargetVCRControl (&pVCR);
pVCR - >停止();
pVCR - >释放();
}
返回真正的;
打破;
情况下WM_DESTROY:
/ /重置通知窗口
g_pConvert - > SetNotifyWindow ((长)空,0);
# ifdef _DEBUG
{
长状态,呃,电脑;
双开始、结束大调的;
TCHAR sz [1024];
/ /得到当前状态
g_pConvert - > get_State(状态);
/ /得到当前状态
g_pConvert - > get_ConvertError(错);
/ /得到转换
g_pConvert - > get_PercentComplete (pc);
/ /开始
g_pConvert - > get_SelectionStart(开始);
/ /结束
g_pConvert - > get_SelectionEnd(与结束);
/ /得到持续时间
g_pConvert - > get_Duration(大调的);
_stprintf(深圳_T (“国家= % d,错误= 0 x %。8 x,完成= % d % % = %克开始,结束= % g,时间= % g”),状态,呃,电脑,开始,结束,大调的);
对话框(NULL,深圳,_T (“调试”),MB_OK);
}
# endif
打破;
情况下WM_COMMAND:
开关(LOWORD(按钮)
{
情况下IDC_USERABORT:
/ /用户中止……停止转换
g_pConvert - > get_State(状态);
如果(国家= = ltmmConvert_State_Running)
g_pConvert - > StopConvert ();
其他的
{
g_pConvert - > get_ConvertError ((长*)人力资源);
EndDialog (hwnd, (长)人力资源);
}
返回真正的;
打破;
}
打破;
情况下WM_CONVERTNOTIFY:
开关(按钮)
{
情况下ltmmConvert_Notify_Started:
/ /显示转换已经开始
g_pConvert - > get_SourceType(接线箱);
开关(类型)
{
情况下ltmmConvert_Source_File:
g_pConvert - > get_SourceFile (&bstr1);
打破;
情况下ltmmConvert_Source_HGlobal:
bstr1 = SysAllocString (L“[hglobal]”);
打破;
情况下ltmmConvert_Source_Array:
bstr1 = SysAllocString (L“数组”);
打破;
情况下ltmmConvert_Source_Object:
bstr1 = SysAllocString (L“对象”);
打破;
}
g_pConvert - > get_TargetType(接线箱);
开关(类型)
{
情况下ltmmConvert_Target_File:
g_pConvert - > get_TargetFile (&bstr2);
打破;
情况下ltmmConvert_Target_Array:
bstr2 = SysAllocString (L“数组”);
打破;
情况下ltmmConvert_Target_Object:
bstr2 = SysAllocString (L“对象”);
打破;
情况下ltmmConvert_Target_Device:
bstr2 = SysAllocString (L“设备”);
打破;
}
g_pConvert - > get_RenderedStreams(流);
如果((流& ltmmConvert_Stream_Audio) & !(流& ltmmConvert_Stream_Video))
_stprintf(深圳_T (“recompressing音频从‘% ls’% ls……”)、bstr1 bstr2);
其他的如果(!(流& ltmmConvert_Stream_Audio) &(流& ltmmConvert_Stream_Video))
_stprintf(深圳_T (“recompressing视频从‘% ls’% ls……”)、bstr1 bstr2);
其他的
_stprintf(深圳_T (“recompressing % ls’% ls……”)、bstr1 bstr2);
SysFreeString (bstr1);
SysFreeString (bstr2);
SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);
UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));
打破;
情况下ltmmConvert_Notify_Complete:
/ /显示一个转换完成
_stprintf(深圳_T (“转换完成”));
SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);
UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));
SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));
/ /停止,如果录像机
g_pConvert - > get_TargetVCRControl (&pVCR);
pVCR - >停止();
pVCR - >释放();
打破;
情况下ltmmConvert_Notify_ErrorAbort:
/ /显示一个错误
_stprintf(深圳_T (“转换错误0 x % .8X”),lParam);
SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);
UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));
SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));
MessageBeep (0);
/ /停止,如果录像机
g_pConvert - > get_TargetVCRControl (&pVCR);
pVCR - >停止();
pVCR - >释放();
打破;
情况下ltmmConvert_Notify_UserAbort:
/ /显示用户中止
_stprintf(深圳_T (“转换失败\ n”));
SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);
UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));
SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));
MessageBeep (0);
/ /停止,如果录像机
g_pConvert - > get_TargetVCRControl (&pVCR);
pVCR - >停止();
pVCR - >释放();
打破;
情况下ltmmConvert_Notify_Progress:
/ /显示转换的进展
_stprintf(深圳_T (“% 3 d % %完成”),lParam);
SetDlgItemText (hwnd, IDC_CONVERTPROGRESS、深圳);
UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTPROGRESS));
打破;
}
返回真正的;
打破;
}
返回虚假的;
}
/ /
/ / SetAVIRecompression
/ /设置视频压缩,MP3音频压缩和AVI文件输出
/ /
/ / hwndParent =压缩机属性对话框的父窗口
/ /
HRESULT SetAVIRecompression (HWND hwndParent)
{
IltmmCompressors * pCompressors;
长指数;
VARIANT_BOOL f;
型型;
/ /选择视频压缩
g_pConvert - > get_VideoCompressors (&pCompressors);
型= SysAllocString (L“@device:西南:{33 d9a760 - 90 - c8 - 11 - d0 bd43 - 00 - a0c911ce86} \ \铅MCMP / MJPEG编码(2.0)”);
pCompressors - >找到(型、和);
SysFreeString(型);
如果(指数< 0)
{
/ /压缩机不是注册
pCompressors - >释放();
返回E_FAIL;
}
pCompressors - > put_Selection(指数);
pCompressors - >释放();
/ /选择MP3音频视频压缩
g_pConvert - > get_AudioCompressors (&pCompressors);
型= SysAllocString (L“@device:厘米:{33 d9a761 - 90 - c8 - 11 - d0 bd43 - 00 - a0c911ce86} \ \ 85 mpeg第三层”);
pCompressors - >找到(型、和);
SysFreeString(型);
如果(指数< 0)
{
/ /压缩机不是注册
pCompressors - >释放();
返回E_FAIL;
}
pCompressors - > put_Selection(指数);
pCompressors - >释放();
/ /输出格式设置为AVI
g_pConvert - > put_TargetFormat (ltmmConvert_TargetFormat_Avi);
# ifdef _DEBUG
{
长v;
g_pConvert - > get_TargetFormat(增加了);
断言(v = = ltmmConvert_TargetFormat_Avi);
}
# endif
/ /设置视频压缩属性
g_pConvert - > HasDialog (ltmmConvert_Dlg_VideoCompressor, f);
如果(f)
g_pConvert - > ShowDialog (ltmmConvert_Dlg_VideoCompressor, (长)hwndParent);
/ /设置音频压缩属性
g_pConvert - > HasDialog (ltmmConvert_Dlg_AudioCompressor, f);
如果(f)
g_pConvert - > ShowDialog (ltmmConvert_Dlg_AudioCompressor, (长)hwndParent);
返回S_OK;
}
/ / RecompressFileToDVDevice
/ /最后将文件DV设备
/ /
/ / pszSource =源文件路径
/ /
/ /
HRESULT RecompressFileToDVDevice (LPCTSTR pszSource)
{
HRESULT人力资源;
型型;
的ifndef _UNICODE
WCHAR wsz [MAX_PATH];
# endif
IltmmTargetDevices * pDevices;
IltmmCompressors * pCompressors;
/ /设置源文件
# ifdef _UNICODE
= SysAllocString型(pszSource);
#其他的
swprintf (wsz L“% h”,pszSource);
= SysAllocString型(wsz);
# endif
hr = g_pConvert - > put_SourceFile(型);
SysFreeString(型);
如果(失败(人力资源)
返回人力资源;
/ /设置目标设备
hr = g_pConvert - > put_TargetFormat (ltmmConvert_TargetFormat_dvsd);
如果(失败(人力资源)
返回人力资源;
g_pConvert - > get_AudioCompressors (&pCompressors);
hr = pCompressors - > put_Selection (1);
pCompressors - >释放();
如果(失败(人力资源)
返回人力资源;
g_pConvert - > get_VideoCompressors (&pCompressors);
hr = pCompressors - > put_Selection (1);
pCompressors - >释放();
如果(失败(人力资源)
返回人力资源;
g_pConvert - > get_TargetDevices (&pDevices);
hr = pDevices - > put_Selection (0);
pDevices - >释放();
如果(失败(人力资源)
返回人力资源;
/ /转换
hr = (HRESULT)对话框(g_hInstance LPCTSTR IDD_CONVERTDLG, NULL, ConvertDlgProc);
返回人力资源;
}
intAPIENTRY . WinMain(实例句柄实例句柄,
实例句柄hPrevInstance,
[lpCmdLine,
intnCmdShow)
{
HRESULT人力资源;
g_hInstance =实例句柄;
/ /初始化COM库
hr = CoInitialize(空);
如果(失败(人力资源)
转到错误;
/ /创建对象转换
hr = CoCreateInstance (CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER IID_IltmmConvert (无效* *)&g_pConvert);
如果(失败(人力资源)
转到错误;
hr = RecompressFileToDVDevice (MAKE_MEDIA_PATH (“source.avi”));
如果(失败(人力资源)
转到错误;
错误:
/ /清理
如果(g_pConvert)
g_pConvert - >释放();
CoUninitialize ();
返回0;
}
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗Web查看器net
188宝金博怎么下载
支持的平台上
net, Java, Android和iOS / macOS组件
C / c++类库的API
HTML5 JavaScript库
你的邮件已经发送到支持!有人应该联系!如果你的问题是紧急请回到聊天。
聊天时间:
周一——周五,上午6点等
谢谢你的反馈!
请填写表单重新开始一个新的聊天。
所有代理目前离线。
聊天时间:
周一-周五
早上8:30 - 6点
联系我们请填写这张表格,我们将通过电子邮件联系你。