您的位置: 旅游网 > 图库 >> 明星写真

基于灰度颜色个数的视频截图选取牛

发布时间:2021-10-29 05:43:13

其中,为了使用DirectShow,我们除了需要windows.h外,还需要dshow.h,qedit.h和atlbase.h三个头文件,最后再加上一个b库文件。

接下来就开启Visual C# 2005 Express来做一个简单的界面程序。为什么选择C# 来开发界面程序呢?原因很简单,因为C#很简单,同时Visual C# 2005 Express这样免费又功能强大的工具可以使用。

界面程序很简单,就下面这个样子:

C# 部分调用前面写好的DLL函数,实现DDshow的抓图。 源代码如下:

usingSystem;

neric;

xt;

eropServices;

awing;

namespaceMovieGrabberCSharp

...{

classMovieGrabberDLL

...{

[DllImport(\"l\")]

publicstaticexternintfnMovieGrabberDLL();

[DllImport(\"l\")]

保障了炼油企业的合理利润 publicstaticexternIntPtrGrabMovieFrame(stringaPath,intgrayColorCountThreshold);

publicstaticBitmapGrabMovieFrameBitmap(stringaPath,intgrayColorCountThreshold)

...{

IntPtrhBitmap=GrabMovieFrame(aPath,grayColorCountThreshold);

if(hBitmap==ro)

returnnull;

omHbitmap(hBitmap);

}

publicstaticBitmapGrabMovieFrameBitmap(stringaPath)

...{

returnGrabMovieFrameBitmap(aPath,8);

}

}

}

窗口类的源代码如下:

usingSystem;

neric;

ponentModel;

ta;

awing;

xt;

rms;

namespaceMovieGrabberCSharp

...{

publicpartialclassMainForm:Form

...{

publicMainForm()

...{

InitializeComponent();

}

privatevoidOpenMovieFilePathButton_Click(objectsender,EventArgse)

...{

OpenFileDialogdlg=newOpenFileDialog();

if(owDialog()==)

...{

xt=leName;

}

}

privatevoidGrabberButton_Click(objectsender,EventArgse)

...{

Bitmapbitmap=abMovieFrameBitmap(xt);

if(bitmap!=null)

...{

ow(\"抓图成功!\");

zeMode=retchImage;

age=bitmap;

validate();

fresh();

}

else

...{

ow(\"失败!\");

}

}

privatevoidExitButton_Click(objectsender,EventArgse)

...{

ose();

}

}

}

编译完成后,我们使用Windows里面的一个v视频文件来做测试,具体路径是:C:\\WINDOWS\\system32\\oobe\\imagee\\v。之所以选择这个文件作为视频测试文件,因为这个视频是大家安装完成后WINXP后都会自动启动的Windows XP的介绍视频,而且这个视频的开始部分是全黑,然后渐渐变亮,再到Windows XP的动画部分。如果用Windows自带的浏览器看微缩图显示,就是下面这个结果:

可以看到,这个v的微缩图是完全的一张黑色图片,我们并不能看到任何关于视频文件有意义的内容。

下面启动我们刚才编写的Demo视频截图工具来截一下图片,同样这个视频文件,可以看到这个的结果。

其中,程序里面默认给出的灰度颜色个数阈值是8,那么就是说,至少图片要有8个不同的颜色灰度值才会截取,而之前的全黑,全白就自然滤过了。

查看本文来源

广州包皮过长治疗哪家好
拉萨治疗男科医院哪家好
哈尔滨治疗白癜风好方法
猜你会喜欢的
猜你会喜欢的