在 Windows Movie Maker 中创建自定义效果和过渡

Josh Cohen

Mike Matsel

Peter Turcan

Microsoft Corporation

适用于:

Microsoft® Windows® Movie Maker 2.0

Microsoft Windows Movie Maker 2.1

**摘要:**Microsoft Windows Movie Maker 允许程序员为 Windows Movie Maker 界面添加他们自己的自定义的特殊效果和过渡。这些效果可以通过一个修改支持效果或过渡的 XML 文件来创建,或者可以用 C++ 和 Microsoft DirectX Media SDK 提供的 Windows Media Transforms 从头创建。

本页内容

简介
在 XML 中创建 Windows Movie Maker 效果和过渡
读取 XML 文件
生成您自己的 XML 文件
由 Windows Movie Maker 提供的效果和过渡对象
条形过渡
棋格过渡
DirectX Media 擦除过渡
消隐过渡
淡入淡出过渡
Iris 过渡
像素化过渡
SMPTE 擦除过渡
轮型过渡
WMTFX 过渡和效果
模糊效果
亮度效果
淡入淡出效果
旧胶片效果
过滤器效果
镜像和灰度效果
像素化效果
速度效果
将自定义图标添加到 Windows Movie Maker 中
创建新的过渡和效果对象
示例代码概述
开始创建一种新效果
开始创建一种新过渡
向 DLL 传递参数
调试 DLL
将 Blue Adjust 效果更改为 Purple Adjust
词汇表
更多信息

简介

Microsoft® Windows® Movie Maker 2.0 和更高版本允许程序员将他们自己的自定义效果和过渡加载到 Windows Movie Maker 界面中。这些效果或过渡可以是对现有效果或过渡的简单修改,或者是一个自定义编码的 Microsoft DirectX® Transform 复杂对象。本文包含了三个有关创建您自己的效果或过渡的主题。按照从最简单到最复杂的顺序,它们是:

  • 在 XML 中创建 Windows Movie Maker 效果和过渡 这是一项十分简单的任务,只需要一个文本编辑器以及对 XML 有一个基本的了解。

    注要在 Movie Maker 2.1 中完成这一切,您必须拥有计算机的管理员特权。

  • 将自定义图标添加到 Windows Movie Maker 中 这是一个稍微复杂一些的主题,它需要有如何利用 Microsoft Visual Studio 来编译 C++ 项目的知识,以及能够使用制作自定义图标所需要的任何图形软件。

  • 创建新的过渡和效果对象 这需要有 COM 和 ATL 编程、DirectX Transforms、与 Microsoft Direct3D® 体系结构的知识。另外,这还需要安装有 DirectX Media 6.0 SDK 和 DirectX 7.0 SDK 头文件。(DirectX Media SDK 没有包含在 DirectX 7.0 中。)从本文档末尾指定的位置安装的 Visual Studio .NET 和 DirectX Media SDK 都包括 DirectX 7.0 头文件,但两者都不包含文档。只有完全安装的 DirectX 7.0 SDK(可以用本文档末尾的链接进行安装)才包含 DirectX 7.0 SDK 文档。如果您想体验一下如何创建新的 DirectX Transform 对象,可以从 Microsoft 网站下载包含有几种新的效果和过渡的示例代码的压缩文件。

为了完成在所有这些主题中描述的任务,您的计算机上必须安装有 Windows Movie Maker 2.0 或更高版本以及 Microsoft Windows XP Home Edition 或 Windows XP Professional Edition 操作系统。创建自定义的图标或者新的过渡或效果对象还需要安装有 Visual Studio。其他的信息源,以及 DirectX Media SDK 与 DirectX 7.0 SDK 的安装位置可以在本文末尾的“更多信息”部分找到。

在 XML 中创建 Windows Movie Maker 效果和过渡

Windows Movie Maker 在启动时读取一个专用 XML 文件,该文件指定要加载的所有效果和过渡,以及每个对象的参数值。虽然不能查看或更改该 XML 文件;但是您可以利用自己的参数创建自己的 XML 文件来加载选择的对象,并以自定义的名称来显示它们。

Windows Movie Maker 将其内置效果和过渡作为 COM 对象存储在几个随程序提供的 DLL 中。每个 COM 对象表示一种过渡或效果,并用一个全局唯一标识符 (GUID) 来识别。一个 DLL 可以包含几个 COM 对象。每个对象可以没有或者有多个参数,例如颜色或亮度,可以为这种效果或过渡设置这些参数。该 XML 文件指定加载哪些对象,并设定这些对象的任何数量的参数值。一个对象可以用不同的参数加载多次,从而可以根据同一个对象创建不同的效果或过渡。例如,缓慢运动和快速运动效果是同一个对象,只是传递进来的速度参数值不同。了解了这些效果和过渡是如何在 XML 文件中表达之后,您就可以用提供的 COM 对象创建自己的效果和过渡。

注对于 Movie Maker 2.1 ,您必须拥有计算机的管理员特权。

本节介绍:

  • 如何创建自己的 XML 文件,

  • 可以在自定义 XML 文件中使用的必需的和可选的 XML 标记,

  • 创建效果和过渡可用的对象和参数,以及

  • Windows Movie Maker 用来加载它的标准效果和过渡的专用 XML代码,这样您可以快速、轻松地对其进行复制和修改。

读取 XML 文件

下面是 Windows Movie Maker 专用 XML 文件的一段代码,它描述了一种过渡 (Flip Right) 和一种效果 (Sepia):

<TransitionsAndEffects Version="1.0"> 
   <Transitions> 
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}"> 
         <Transition nameID="62800" iconid="91" comment="Flip, right"> 
            <Param name="InternalName" value="Simple3D" /> 
            <Param name="RevolveCamera" value="true" /> 
            <Param name="ShowAFront" value="true" /> 
            <Param name="ShowABack" value="false" /> 
            <Param name="ShowBFront" value="false" /> 
            <Param name="ShowBBack" value="true" /> 
         </Transition> 
         ... 
      </TransitionDLL> 
      ... 
   </Transitions> 
   <Effects> 
      <EffectDLL guid="{B4DC8DD9-2CC1-4081-9B2B-20D7030234EF}"> 
         <Effect nameID="62863" iconid="25" comment="Sepia tone"> 
            <Param name="InternalName" value="Standard" /> 
            <Param name="Desaturate" value="true" /> 
            <Param name="Red" value="0.10" /> 
            <Param name="Magenta" value="0.09" /> 
            <Param name="Yellow" value="0.25" /> 
            <Param name="contrast" value="1.0" /> 
         </Effect> 
         ... 
      </EffectDLL> 
      ... 
   </Effects> 
</TransitionsAndEffects> 

下表解释了前面代码中的标记和属性。过渡和效果使用的标记大多数都相同。对于不同的标记,该表都指出了区别之处。

元素

属性

说明

TransitionsAndEffects

 

整个 XML 文件的边界标记。

 

Version

一个必需的域,应当设置为“1.0”。

Transitions

Effects

 

该标记是所有过渡组或所有效果组的边界。对于一种过渡或效果,要正确使用该标记。

TransitionDLL

EffectDLL

 

该标记是单个效果或过渡 COM 对象的边界,由 GUID 标识。它可以保存一种或多种自定义效果或过渡。对于一种过渡或效果,要正确使用该标记。

 

guid

列出定义过渡或效果 COM 对象的 GUID。(该 GUID 实际上就是 COM 对象的 ClassID,它实现基础代码中的 DirectShow IDXEffect 界面。)这些值由Windows Movie Maker 提供的效果和过渡对象给定。

Transition

Effect

 

这是利用由 TransitionDLL 或 EffectDLL 标记指定的过渡或效果 COM 对象的单个过渡或效果的边界标记。一个 COM 对象可以包含几个过渡或效果。(虽然一个 DLL 文件可以包含几个 COM 对象,但是对于由 Windows Movie Maker 提供的 COM 对象则不需要 DLL 的名称。)对于一种过渡或效果,要正确使用该标记。

 

nameID

name

Do not use nameID; 这是 Windows Movie Maker 用于过渡的内部标识符。相反,当创建自己的文件时,按如下所示替换 name 属性:

<Effect name="My New Effect" iconid="25" comment="My cool new effect">

赋的值将会由 Windows Movie Maker 显示。如果名称不唯一,在预览时显示的效果或过渡就可能不正确;但是 Windows Movie Maker 将会在实际的剪辑视频中使用正确的效果或过渡。

 

iconID

标识 Windows Movie Maker 显示的过渡图标。对于自定义图标,这是一个以零为基数的数值,它表明使用位图条中的哪一个图标。通过选择从 1 到大约 90 的数值,也可以使用 Windows Movie Maker 现有的图标之一。有关添加自定义图标的更多信息,请参阅将自定义图标添加到 Windows Movie Maker 中

 

comment

Windows Movie Maker 忽略的信息。标准标记中的 Comment 属性,通常显示某种效果或过渡的显示名称,尽管它并不总是完全地匹配。

Param

 

保存对象中可设置参数的标记。对象有多少个参数,就有多少个 Param 标记。

 

Name

要设置的参数的名称。

 

Value

引号中赋给参数的值。

生成您自己的 XML 文件

要为 Windows Movie Maker 建立自己的 XML 文件,必须在两个地方中的一处创建(或使用现有的)名为 AddOnTFX 的文件夹,这取决于您拥有的是哪一个版本的 Movie Maker。

对于 Movie Maker 2.0

  • 创建或使用 <Movie Maker installation path>\<decimal LCID> \AddOnTFX 文件夹,其中,<Movie Maker installation path> 是 Movie Maker 的安装位置,而<decimal LCID> 是所安装的语言版本的 decimal 区域设置 ID(英语版本的区域设置 ID 为 1033)。

    例如,对于英文版的 Movie Maker,您可以使用C:\Program Files\Movie Maker\1033\AddOnTFX。这个位置可以使每个人都能使用您的效果,但是要在这个位置创建文件夹,必须有计算机的管理员特权。

  • 创建或使用 <OS Drive>\Documents and Settings\<username>\Application Data\Microsoft Movie Maker\AddOnTFX 文件夹,其中, <OS Drive>是安装 Windows 的磁盘驱动器,而 <username>是您的登录名。总是允许用户在这里添加新文件夹,但是只允许登录名为 username 的用户使用创建的效果。

对于 Movie Maker 2.1

对于 Movie Maker 2.1,您必须拥有安装自定义效果的管理员特权。利用下面的一个或两个位置来安装您的 XML(以及任何自定义 DLL)文件:

  • <Movie Maker installation path>\MUI\<hexadecimal LCID >\AddOnTFX,其中, <Movie Maker installation path>是 Movie Maker 的安装位置,而 <hexadecimal LCID>是安装的语言版本的十六进制区域设置 ID(英语版本的十六进制区域设置 ID 为 0409)。

    例如,对于英文版的 Movie Maker,您可以使用C:\Program Files\Movie Maker\0409\AddOnTFX。这个位置可以使每个人都能使用您的效果,但是要在这个位置创建文件夹,必须有计算机的管理员特权。

  • <Movie Maker installation path> \shared\AddOnTFX。例如,在您的计算机上,这个文件夹路径可以是C:\Program Files\Movie Maker\Shared\AddOnTFX。这使得各个地方的每个人都可以使用您的效果,但是要在这个位置创建文件夹,必须有计算机的管理员特权。

Windows Movie Maker 对这两条路径(每个版本的)都进行检查,并加载在这两个位置发现的所有过渡和效果。如果您计划拥有本地版本的过渡,一定要使用区域设置 ID 文件夹,而不要使用本地用户或共享文件夹。

在已经创建的AddOnTFX文件夹中,用记事本或任何其他 XML 制作软件创建一个扩展名为 .xml 的新文件。除了扩展名必须为 .xml 外,对该文件的命名没有限制。创建新 XML 文件之后,可以粘贴到前面的示例代码中(请参阅“读取 XML 文件”)并做一些更改(例如,将nameID属性更改为name,添加您自己的名称,并删除“...”)。下面的代码块显示了前面的示例修改后的版本。这是一个完整的 XML 文件,它创建了一个不同的自定义 Flip Right 过渡和 Sepia 效果。这些新代码使用了从标准 Windows Movie Maker 图标集中获得的新图标:

<TransitionsAndEffects Version="1.0" > 
   <Transitions> 
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}"> 
         <Transition name="My cool transition" iconid="88"> 
            <Param name="InternalName" value="Simple3D" /> 
            <Param name="RevolveCamera" value="true" /> 
            <Param name="ShowAFront" value="true" /> 
            <Param name="ShowABack" value="false" /> 
            <Param name="InitialScaleA" value="smaller" /> 
            <Param name="FinalScaleA" value="bigger" /> 
            <Param name="ShowBFront" value="false" /> 
            <Param name="ShowBBack" value="true" /> 
         </Transition> 
      </TransitionDLL> 
   </Transitions> 
   <Effects> 
      <EffectDLL guid="{B4DC8DD9-2CC1-4081-9B2B-20D7030234EF}"> 
         <Effect name="My Yellow, Rotated Effect" iconid="20" comment="Yellow, turned 3/4"> 
            <Param name="InternalName" value="Standard" /> 
            <Param name="Desaturate" value="true" /> 
            <Param name="Red" value="0.0" /> 
            <Param name="Magenta" value="0.09" /> 
            <Param name="Yellow" value="0.75" /> 
            <Param name="contrast" value="1.0" /> 
            <Param name="Rotate2DA" value="270.0" /> 
         </Effect> 
      </EffectDLL> 
   </Effects> 
</TransitionsAndEffects> 

在创建自定义 XML 文件时,要了解下面的两条预防措施:

  • 如果您的 XML 文件格式不正确,如果使用的 GUID 不正确,或者您的 XML 文件有一些其他问题,则 Windows Movie Maker 将可能不会从该文件加载任何效果或过渡,并且不会通知您没有加载该文件。如果创建的效果或过渡没有出现在 Windows Movie Maker 界面中,则要查找 XML 文件中的错误。

  • Windows Movie Maker 只在启动时加载 XML 文件。在 Windows Movie Maker 运行时对 XML 文件所做的任何更改都不会生效,直到您关闭和重新启动 Windows Movie Maker。

由 Windows Movie Maker 提供的效果和过渡对象

本主题中的两个表列出了 Windows Movie Maker 提供的所有基本过渡和效果对象。每个过渡或效果对象可能包含一个或多个可以更改的参数,甚至还包括带其自己的参数的子类。不必为创建的效果或过渡设置所有的参数,因为每个参数都有一个默认值。

过渡和效果在不同的表中显示。不能将过渡对象用作效果,也不能将效果对象用作过渡。例如,因为 Pixelate 对象是一种效果,而不是一种过渡,所以下面的代码将不会起作用:

<TransitionDLL guid="{4CCEA634-FBE0-11D1-906A-00C04FD9189D}" comment="Pixelate"> 
   <Transition nameID="62818" iconid="19" comment="Pixelate"> 
      <Param name="MaxSquare" value="25" /> 
   </Transition> 
</TransitionDLL> 

有关所有过渡和效果的详细信息在这些表下面的主题中进行了说明,这些表中包含有这些主题的链接。每个主题都包含有 Windows Movie Maker 用来加载 Windows Movie Maker 提供的效果或过渡的 XML 代码。下面表中使用的名称是任意的;Windows Movie Maker 显示的名称类似于显示的 XML 代码中分配给 EffectDLL 标记的 comment 属性的名称。

过渡

名称

GUID

说明

Bars

2E7700B7-27C4-437F-9FBF-1E8BE2817566

在水平段上,将第一个视频合并到第二个视频中。

Checkerboard

B3EE7802-8224-4787-A1EA-F0DE16DEABD3

通过方形区域将第一个视频合并到第二个视频中。

DirectX Media Wipe

AF279B30-86EB-11D1-81BF-0000F87557DB

各种自定义 DirectX Media 擦除。

Dissolve

F7F4A1B6-8E87-452F-A2D7-3077F508DBC0

将一个视频段以离散点的形式消隐到另一个视频段中(与淡入淡出相对,它可以使视频实现无缝交换)。

Fade

16B280C5-EE70-11D1-9066-00C04FD9189D

将第一个视频淡入到第二个视频中。

Iris

049F2CE6-D996-4721-897A-DB15CE9EB73D

将第一个视频分裂成四部分并从中心按对角线方向向外移动。

Pixelate

4CCEA634-FBE0-11D1-906A-00C04FD9189D

使第一个视频粗化,然后转换到第二个视频。

SMPTE Wipe

DE75D012-7A65-11D2-8CEA-00A0C9441E20

各种标准的 SMPTE 过渡。有关详细信息,请参阅 Microsoft DirectShow 文档。

Wheel

5AE1DAE0-1461-11D2-A484-00C04F8EFB69

提供从第一个视频到第二个视频的旋转轮辐擦除。

WMTFX transitions

C63344D8-70D3-4032-9B32-7A3CAD5091A5

各种过渡和效果。

效果

名称

GUID

说明

Blur

7312498D-E87A-11D1-81E0-0000F87557DB

模糊图像。

Brightness

5A20FD6F-F8FE-4a22-9EE7-307D72D09E6E

修改视频段的亮度。

Fade

EC85D8F1-1C4E-46e4-A748-7AA04E7C0496

使剪辑淡入或淡出选择的纯色。

Film Aging

ADEADEB8-E54B-11d1-9A72-0000F875EADE

采用颗粒状、涂抹,以及其他的视觉假象,使胶片看起来好像是旧的。

Filter

E673DCF2-C316-4c6f-AA96-4E4DC6DC291E

提供各种视频效果,如霓虹灯闪烁、海绵状和浮雕。

Mirror and Grayscale

16B280C8-EE70-11D1-9066-00C04FD9189D

使图像水平翻转或从彩色转变成灰度,创建黑白图像。

Pixelate

4CCEA634-FBE0-11D1-906A-00C04FD9189D

使图像粗化成纯色的方格,表示原来区域像素的平均颜色。

Speed

00000000-0000-0000-0000-000000000000

空 GUID 只用于减速或加速。

WMTFX effects

B4DC8DD9-2CC1-4081-9B2B-20D7030234EF

提供各种过渡和效果。

条形过渡

条形过渡在水平段上将第一个视频合并到第二个视频中。它不采用参数。下列 XML 代码显示了 Windows Movie Maker 中包括的条形过渡:

<TransitionDLL guid="{2E7700B7-27C4-437F-9FBF-1E8BE2817566}"> 
   <Transition nameID="62817" iconid="37" comment="Bars"/> 
</TransitionDLL> 

另请参阅

棋格过渡

棋格过渡通过方形区域将第一个视频合并到第二个视频中。它不采用参数。下列 XML 代码显示了 Windows Movie Maker 中包括的棋格过渡:

<TransitionDLL guid="{B3EE7802-8224-4787-A1EA-F0DE16DEABD3}"> 
   <Transition nameID="62815" iconid="4" comment="Checkerboard, Across" /> 
</TransitionDLL> 

另请参阅

DirectX Media 擦除过渡

DirectX Media 擦除过渡提供基于 DirectX Media 擦除的擦除。DirectX Media 擦除采用下列参数。

参数

类型

默认值

范围

说明

GradientSize

float

0.25

0.0 to 1.0

两个输入之间渐变过渡区的宽度,用占输出大小的百分比表示。

WipeStype

int

0

0 or 1

擦除的方向。可以是水平的 (0) 或垂直的 (1)。

下列 XML 代码显示了 Windows Movie Maker 中包括的 DirectX Media 擦除过渡:

<TransitionDLL guid="{AF279B30-86EB-11D1-81BF-0000F87557DB}" comment="Wipe"> 
   <Transition nameID="62820" iconid="60" comment="Wipe, Wide Down"> 
      <Param name="GradientSize" value="0.6" /> 
      <Param name="wipeStyle" value="1" /> 
   </Transition> 
   <Transition nameID="62821" iconid="58" comment="Wipe, Normal Down"> 
      <Param name="GradientSize" value="0.5" /> 
      <Param name="wipeStyle" value="1" /> 
   </Transition> 
   <Transition nameID="62822" iconid="56" comment="Wipe, Narrow Down"> 
      <Param name="GradientSize" value="0.2" /> 
      <Param name="wipeStyle" value="1" /> 
   </Transition> 
   <Transition nameID="62823" iconid="59" comment="Wipe, Wide right"> 
      <Param name="GradientSize" value="0.6" /> 
      <Param name="wipeStyle" value="0" /> 
   </Transition> 
   <Transition nameID="62824" iconid="57" comment="Wipe, Normal right"> 
      <Param name="GradientSize" value="0.5" /> 
      <Param name="wipeStyle" value="0" /> 
   </Transition> 
   <Transition nameID="62825" iconid="55" comment="Wipe, Narrow right"> 
      <Param name="GradientSize" value="0.2" /> 
      <Param name="wipeStyle" value="0" /> 
   </Transition> 
</TransitionDLL> 

另请参阅

消隐过渡

消隐过渡以离散点的形式将一个视频段消隐到另一个视频段中(与淡入淡出相对,它可以使视频实现无缝交换)。它不采用参数。下列 XML 代码显示了 MovieMaker 中包括的消隐过渡:

<TransitionDLL guid="{F7F4A1B6-8E87-452F-A2D7-3077F508DBC0}"> 
   <Transition nameID="62816" iconid="38" comment="Dissolve" /> 
</TransitionDLL> 

另请参阅

淡入淡出过渡

淡入淡出过渡提供了利用 DirectX Media 过渡创建淡入淡出过渡的一些功能。它不采用参数。

下列 XML 代码显示了 Windows Movie Maker 中包括的淡入淡出过渡:

<TransitionDLL guid="{16B280C5-EE70-11D1-9066-00C04FD9189D}"> 
   <Transition nameID="62814" iconid="12" comment="Fade" /> 
</TransitionDLL> 

另请参阅

Iris 过渡

Iris 过渡将屏幕分裂成四部分,并从中心按对角线方向向外移动。它不采用参数。

下列 XML 代码显示了 Windows Movie Maker 中包括的 Iris 过渡:

<TransitionDLL guid="{049F2CE6-D996-4721-897A-DB15CE9EB73D}"> 
   <Transition nameID="62813" iconid="29" comment="Iris" /> 
</TransitionDLL> 

另请参阅

像素化过渡

像素化过渡使第一个视频粗化,然后转换到第二个视频。它不采用参数。下列 XML 代码显示了 Windows Movie Maker 中包括的像素化过渡:

<TransitionDLL guid="{4CCEA634-FBE0-11D1-906A-00C04FD9189D}"> 
   <Transition nameID="62818" iconid="36" comment="Pixelate"/> 
</TransitionDLL> 

另请参阅

SMPTE 擦除过渡

SMPTE 擦除是标准的 SMPTE(活动图像和电视工程师协会)擦除,如 DirectShow 文档中所述。下表显示了可用于 SMPTE 擦除的参数。

参数

类型

默认值

说明

BorderColor

long

擦除图案边缘的边界颜色。该属性值是个十六进制数,其格式为 0xRRGGBB,其中,RR 是红色十六进制值,GG 是绿色十六进制值,而 BB 是蓝色十六进制值。(因此,纯红、纯绿和纯蓝分别是 0xFF000、0x00FF00 和 0x0000FF)。

BorderSoftness

long

0.0

擦除图案边缘模糊区域的宽度。没有模糊区域指定为 0(零)

BorderWidth

long

0

擦除图案边缘的纯色边界宽度。没有边界指定为 0(零)。

MaskName

string

NULL

如果不是 NULL,指定某个 JPEG 文件的名称,用作擦除掩码,替代标准的内置擦除。该文件必须包含一个单色的、每像素 8 位的梯度。该梯度用作定义擦除级数的掩码。

MaskNum

long

1

标准的 SMPTE 擦除代码指定要使用的擦除的样式。有关擦除代码列表及其相关的示意图,请参阅 SMPTE 文档 258M-1993。

OffsetX

long

0

擦除的起点在水平方向上到图像中心的偏移距离。仅从 101 到 131 的MaskNum 值有效。

OffsetY

long

0

擦除的起点在垂直方向上到图像中心的偏移距离。仅从 101 到 131 的 MaskNum 值有效。

ReplicateX

long

0

在水平方向上复制擦除图案的次数。仅从 101 到 131 的 MaskNum 值有效。

ReplicateY

long

0

在垂直方向上复制擦除图案的次数。仅从 101 到 131 的 MaskNum 值有效。

ScaleX

long

0.0

在水平方向上擦除的伸展量,用占原先定义擦除的百分比表示。仅从 101 到 131 的 MaskNum 值有效。

ScaleY

long

0.0

在垂直方向上擦除的伸展量,用占原先擦除定义的百分比表示。仅从 101 到 131 的 MaskNum 值有效。

下列 XML 代码说明了 Windows Movie Maker 中包括的标准 SMPTE 擦除。comment 参数通常给出 Windows Movie Maker 过渡列表中显示的过渡名称。

<TransitionDLL guid="{DE75D012-7A65-11D2-8CEA-00A0C9441E20}" comment="DxtJpeg/SMPTE wipes"> 
   <Transition nameID="62826" iconid="41" comment="Reveal, Right|(smpte 1)"> 
      <Param name="MaskNum" value="1" /> 
   </Transition> 
   <Transition nameID="62827" iconid="40" comment="Reveal, Down|(smpte 2)" > 
      <Param name="MaskNum" value="2" /> 
   </Transition> 
   <Transition nameID="62828" iconid="27" comment="Inset, Down Right|(smpte 3)"> 
      <Param name="MaskNum" value="3" /> 
   </Transition> 
   <Transition nameID="62829" iconid="28" comment="Inset, Down Left|(smpte 4)" > 
      <Param name="MaskNum" value="4" /> 
   </Transition> 
   <Transition nameID="62830" iconid="25" comment="Inset, Up Left|(smpte 5)"> 
      <Param name="MaskNum" value="5" /> 
   </Transition> 
   <Transition nameID="62831" iconid="24" comment="Inset, Up Right|(smpte 6)"> 
      <Param name="MaskNum" value="6" /> 
   </Transition> 
   <Transition nameID="62832" iconid="50" comment="Split, Vertical|(smpte 21)" > 
      <Param name="MaskNum" value="21" /> 
   </Transition> 
   <Transition nameID="62833" iconid="22" comment="Split, Horizontal|(smpte 22)"> 
      <Param name="MaskNum" value="22" /> 
   </Transition> 
   <Transition nameID="62834" iconid="9" comment="Diagonal, Down Right|(smpte 41)"> 
      <Param name="MaskNum" value="41" /> 
   </Transition> 
   <Transition nameID="62835" iconid="51" comment="Bow Tie, Vertical|(smpte 43)"> 
      <Param name="MaskNum" value="43" /> 
   </Transition> 
   <Transition nameID="62836" iconid="23" comment="Bow Tie, Horizontal|(smpte 44)"> 
      <Param name="MaskNum" value="44" /> 
   </Transition> 
   <Transition nameID="62837" iconid="8" comment="Diagonal, Cross Out|(smpte 47)"> 
      <Param name="MaskNum" value="47" /> 
   </Transition> 
   <Transition nameID="62838" iconid="7" comment="Diagonal, Box Out|(smpte 48)"> 
      <Param name="MaskNum" value="48" /> 
   </Transition> 
   <Transition nameID="62839" iconid="16" comment="Filled V, Down|(smpte 61)"> 
      <Param name="MaskNum" value="61" /> 
   </Transition> 
   <Transition nameID="62840" iconid="15" comment="Filled V, Left|(smpte 62)"> 
      <Param name="MaskNum" value="62" /> 
   </Transition> 
   <Transition nameID="62841" iconid="13" comment="Filled V, Up|(smpte 63)"> 
      <Param name="MaskNum" value="63" /> 
   </Transition> 
   <Transition nameID="62842" iconid="14" comment="Filled V, Right|(smpte 64)"> 
      <Param name="MaskNum" value="64" /> 
   </Transition> 
   <Transition nameID="62844" iconid="64" comment="Zig Zag, Vertical|(smpte 73)"> 
      <Param name="MaskNum" value="73" /> 
   </Transition> 
   <Transition nameID="62845" iconid="62" comment="Zig Zag, Horizontal|(smpte 74)"> 
      <Param name="MaskNum" value="74" /> 
   </Transition> 
   <Transition nameID="62846" iconid="39" comment="Rectangle, Out|(smpte 101)"> 
      <Param name="MaskNum" value="101" /> 
   </Transition> 
   <Transition nameID="62847" iconid="11" comment="Diamond, Out|(smpte 102)"> 
      <Param name="MaskNum" value="102" /> 
   </Transition> 
   <Transition nameID="62848" iconid="80" comment="Circle, Out, Soft|(smpte 119)"> 
      <Param name="MaskNum" value="119" /> 
      <Param name="BorderSoftness" value="20" /> 
   </Transition> 
   <Transition nameID="62849" iconid="81" comment="Circles, Out, Soft|(smpte 119)"> 
      <Param name="MaskNum" value="119" /> 
      <Param name="ReplicateX" value="8" /> 
      <Param name="ReplicateY" value="6" /> 
      <Param name="BorderSoftness" value="75" /> 
   </Transition> 
   <Transition nameID="62850" iconid="46" comment="Star, 5 Points|(smpte 128)"> 
      <Param name="MaskNum" value="128" /> 
      <Param name="BorderSoftness" value="20" /> 
   </Transition> 
   <Transition nameID="62851" iconid="83" comment="Stars, 5 Points|(smpte 128)"> 
      <Param name="MaskNum" value="128" /> 
      <Param name="ReplicateX" value="5" /> 
      <Param name="ReplicateY" value="5" /> 
      <Param name="BorderSoftness" value="75" /> 
   </Transition> 
   <Transition nameID="62852" iconid="18" comment="Heart|(smpte 130)"> 
      <Param name="MaskNum" value="130" /> 
      <Param name="BorderSoftness" value="20" /> 
   </Transition> 
   <Transition nameID="62853" iconid="30" comment="Key Hole|(smpte 131)" > 
      <Param name="MaskNum" value="131" /> 
      <Param name="BorderSoftness" value="20" /> 
   </Transition> 
   <Transition nameID="62854" iconid="84" comment="Sweep, Diagonal|(smpte 226)"> 
      <Param name="MaskNum" value="226" /> 
   </Transition> 
   <Transition nameID="62855" iconid="85" comment="Sweep, Horizontal|(smpte 228)"> 
      <Param name="MaskNum" value="228" /> 
   </Transition> 
   <Transition nameID="62856" iconid="82" comment="Fan, In, Vertical|(smpte 231)"> 
      <Param name="MaskNum" value="231" /> 
   </Transition> 
   <Transition nameID="62857" iconid="3" comment="Eye|(smpte 122)"> 
      <Param name="MaskNum" value="122" /> 
      <Param name="BorderSoftness" value="20" /> 
   </Transition> 
   <Transition nameID="62858" iconid="86" comment="Swinging Door, Bottom|(smpte 253)"> 
      <Param name="MaskNum" value="253" /> 
   </Transition> 
   <Transition nameID="62859" iconid="87" comment="Windshield, Up|(smpte 262)"> 
      <Param name="MaskNum" value="262" /> 
   </Transition> 
   <Transition nameID="62860" iconid="88" comment="Windshield, Vertical|(smpte 263)" > 
      <Param name="MaskNum" value="263" /> 
   </Transition> 
   </TransitionDLL> 
</Transitions> 

另请参阅

轮型过渡

轮型过渡提供了一种旋转轮辐的擦除。它采用下列参数。

参数

类型

默认值

范围

说明

Spokes

int

4

2 to 20

轮辐的数量。

下列 XML 代码显示了 Windows Movie Maker 中包括的轮型过渡:

<TransitionDLL guid="{5AE1DAE0-1461-11D2-A484-00C04F8EFB69}"> 
   <Transition nameID="62819" iconid="53" comment="Wheel, 4 spokes"> 
      <Param name="spokes" value="4" /> 
   </Transition> 
</TransitionDLL> 

另请参阅

WMTFX 过渡和效果

Windows 媒体转换效果 (WMTFX) 是一组可以用一系列标准参数组合的效果和过渡。这些过渡和效果基于两个 COM 对象中的一个对象,这两个对象公开了相同的参数,但是一个对象用来构建过渡 (GUID C63344D8-70D3-4032-9B32-7A3CAD5091A5),而另一个用于构建效果 (GUID B4DC8DD9-2CC1-4081-9B2B-20D7030234EF)。当创建 WMTFX 过渡或效果时,一定要确保指定相应对象的 GUID,并且效果是在 <effect> 块内,而过渡在 <transition> 块内。下列代码显示了一个示例过渡和一个示例效果:

<TransitionsAndEffects Version="1.0"> 
   <Transitions> 
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}"> 
         <Transition name="My rotating fade" iconid="91"> 
            <Param name="InternalName" value="ParticleSystem"/> 
            <Param name="RotateA" value="left"/> 
            <Param name="FadeStartA" value="0.1"/> 
         </Transition> 
      </TransitionDLL> 
   </Transitions> 
   <Effects> 
      <EffectDLL guid="{B4DC8DD9-2CC1-4081-9B2B-20D7030234EF}"> 
         <Effect name="My yellow effect" iconid="9"> 
            <Param name="InternalName" value="Standard"/> 
            <Param name="Yellow" value="1.0"/> 
            <Param name="Magenta" value="-1.0"/> 
            <Param name="Cyan" value="-1.0"/> 
         </Effect> 
      </EffectDLL> 
   </Effects> 
</TransitionsAndEffects> 

WMTFX 过渡或效果可以基于下列四种类中的一种:

  • Standard

  • Hue

  • Simple3D

  • ParticleSystem

每个类公开特定的参数,后面的内容将对此进行说明。您使用的类由 InternalName 参数指定,如下所示:

<Param name="InternalName" value=someclassname /> 

这必须是提供给该类的第一个参数。

请注意,ParticleSystem 类扩展了 Simple3D 类,并公开了它的两个参数和 Simple3D 参数。例如,一个基于 ParticleSystem 类的效果将同时公开 ParticleSystem 参数和 Simple3D 参数。

虽然效果和过渡的类和参数都是相同的,但是并不是所有参数对所有的效果和过渡都起作用。例如,某个基于 Standard 类的过渡就将没有指定过渡何时发生的参数。必须通过一些试验来查看对于某种效果或过渡需要哪些类和参数一起工作。

下表列出了每个类公开的参数。当“A”或“B”出现在参数名中时,“A”表示目前的或前面的剪辑或图片,而“B”表示取代它的新剪辑或图片。

Standard 类参数

参数

类型

默认值

范围

说明

Invert

float

None

0.0 to 1.0

颜色转换将生成新的颜色值,就是 255 减去以前的颜色值。只转换大于 Invert 参数的提交值与 255 的乘积的值。

Red

float

None

-1.0 to 1.0

调整颜色平衡。

Green

float

None

-1.0 to 1.0

调整颜色平衡。

Blue

float

None

-1.0 to 1.0

调整颜色平衡。

Cyan

float

None

-1.0 to 1.0

调整颜色平衡。如果指定 Red,则忽略。

Magenta

float

None

-1.0 to 1.0

调整颜色平衡。如果指定 Green,则忽略。

Yellow

float

None

-1.0 to 1.0

调整颜色平衡。如果指定 Blue,则忽略。

Brightness

float

None

0.0 to infinity

对于亮度调整,每种颜色通道值要乘以提交值。这些值应当大于或等于 0,通常为 1.0 左右。

Contrast

float

None

0.0 to infinity

对比调整围绕中点改变每种颜色通道的范围。这些值应该大于或等于 0,通常为 1.0 左右。

Posterize

int

None

0 to 255

该值是分色后应当保持的颜色深度。

Threshold

float

None

0.0 to 1.0

对于阈值过滤调整,将其值小于提交的 Threshold 值与 255 的乘积的每个示例颜色通道设置为 0。值等于或大于该阈值的每种颜色通道被设置为 255。

Gamma

float

None

0.0 to infinity

像素的灰度系数修正。小于 1.0 变暗,大于 1.0 变亮。

ExponentialProgressDuration

float

0.0

0.0 to 1.0

从 0.0 开始的时间长度,在该时间段内,进度是按对数衡量的。此后进度是线性的。

ExponentialProgressScale

float

0.3

0.0 to infinity

按指数衡量的进度。等式是:LogrithmicScale = -log(1.0 - LinearProgress ) * ExponentialProgressScale

MirrorVertical

bool

false

"false" or "true"

如果为真,则颠倒输出图形。

Desaturate

bool

false

"false" or "true"

如果为真,则将图像转换为灰度(黑白);如果为假,则为彩色。

Rotate2DA

int

0

0 to 359

输出视频的旋转度数。

Hue 类参数

该类从 Standard 类继承而来,只用于 Windows Movie Maker 中包括的色调循环效果。该效果通过色谱循环视频—蓝色、青色、绿色、黄色、红色、洋红,再回到蓝色—允许用户在从 0 到 1 的范围内选择开始和结束的颜色,其中 0 和 1 在此路径上都是蓝色。

参数

类型

默认值

范围

说明

Value

float

0.0

0.0 to 1.0

开始颜色的范围,其中 0 表示蓝色,0.5 表示黄色,而 1 又表示蓝色。

EndValue

float

None

0.0 to 1.0

结束颜色的范围,其中 0 表示蓝色,0.5 表示黄色,而 1 又表示蓝色。如果指定 Value,则也必须指定 EndValue,否则该效果无效。

Simple3D 类参数

该类一般是由基本的旋转、扩展、收缩或翻页过渡使用的。

参数

类型

默认值

范围

说明

MoveA

string

左、右、上、下

按属性方向滑动第一个视频:左、右、上、下、入或出

MoveSpeedA

float

1.0

0.0 to infinity

MoveA 参数应用的速度。

RotateA

string

左、右、上、下

第一个视频旋转的方向。

ScaleA

string

none

较小、较大或 float > 0

最终视频大小与原始视频的比较。“较小”和“较大”给出了一般的相对值,而浮点数是个尺寸因子(1.0 表示最后的大小和原先的大小相同)。

InitialScaleA

string

1.0

较小、较大或 float > 0

初始视频大小与原始视频的比较。“较小”和“较大”给出了一般的相对值,而浮点数是个大小因子(1.0 表示最初的尺寸和原先的尺寸相同)。

RotateCenterA

string

none

仅右下方

第一个视频的旋转中心。

ZScaleAStart

string

none

0.0 to 1.0

X 轴停止缩放而 Z 轴开始缩放的时间。

ShowAFront

bool

true

true 或 false

该参数为 true 时,呈现第一个视频前面的多边形。

ShowABack

bool

false

true 或 false

该参数为 true 时,呈现第一个视频后面的多边形。

ShowBFront

bool

true

true 或 false

该参数为 true 时,呈现第二个视频前面的多边形。

ShowABack

bool

false

true 或 false

该参数为 true 时,呈现第一个视频后面的多边形。

ShowBFront

bool

true

true 或 false

该参数为 true 时,呈现第二个视频前面的多边形。

ShowBBack

bool

false

true 或 false

该参数为 true 时,呈现第二个视频后面的多边形。

RevolveCamera

string

nothing

true 或无

为 true 时,摄像机绕着世界坐标系的 x 轴旋转。如果任一值被传送到该参数,那么它将该值设置为 true。

PageCurlA

string

none

右下、左下、左上、右上、右、左、上或下。

页面开始卷曲的地方。

FadeStartA

float

none

.0 到 1.0

第一个视频开始淡出的时间。

ParticleSystem 类参数

该类从 Simple3D 类继承而来,并公开了所有的 Simple3D 参数和这些参数。这些效果使得图像能够分为旋转、三维颗粒(正方形或矩形),并可按期望的方向移动。

参数

类型

默认值

范围

说明

ScatterDirection

string

左、右、上、下、入、出

第一个视频的碎片移动的方向,其中“入”表示远离查看器,而“出”表示朝向查看器。可以选择多个方向,所以“上、左”表示该部分移向屏幕的左上方。

ParticleSpeed

float

1.0

> 0

碎片移动的速度。

SpinDirection

string

左、右、上、下、入、出

第一个视频的碎片旋转的方向,其中“入”表示朝向屏幕,而“出”表示远离屏幕。只选择一个方向。

ParticleSpinSpeed

float

1.0

> 0

颗粒的旋转速度。

MaxParticles

int

100

3 to 1000

情节中的最多颗粒数。

Gravity

float

0.0

0 到无穷大

颗粒的垂直加速度。

RandomizeSpeed

float

1.0

任意数值

随机因子。设置为 0(零)使所有颗粒的速度相同。

BothDirections

bool

false

true 或 false

如果为 true,则颗粒向两个方向移动的概率相同。

下列 XML 代码描述了 Windows Movie Maker 中包含的所有 WMTFX 过渡和效果。comment 参数通常给出 Windows Movie Maker 过渡或效果列表中显示的名称。

WMTFX 过渡

<TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}"> 
   <Transition nameID="62800" iconid="91" comment="Flip, right"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="RevolveCamera" value="true" /> 
      <Param name="ShowAFront" value="true" /> 
      <Param name="ShowABack" value="false" /> 
      <Param name="ShowBFront" value="false" /> 
      <Param name="ShowBBack" value="true" /> 
   </Transition> 
   <Transition nameID="62801" iconid="72" comment="Slide, up"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="MoveA" value="up" /> 
   </Transition> 
   <Transition nameID="62802" iconid="73" comment="Slide up, center"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="MoveA" value="up" /> 
      <Param name="ScaleA" value="smaller" /> 
      <Param name="MoveSpeedA" value="0.75" /> 
   </Transition> 
   <Transition nameID="62803" iconid="70" comment="Roll, right"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="RotateA" value="right" /> 
      <Param name="RotateCenterA" value="lowerright" /> 
   </Transition> 
   <Transition nameID="62804" iconid="74" comment="Spin out, left"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="ScaleA" value="smaller" /> 
      <Param name="RotateA" value="left" /> 
      <Param name="FadeStartA" value="0.2" /> 
   </Transition> 
   <Transition nameID="62805" iconid="89" comment="Page Curl, lower left"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="PageCurlA" value="lowerleft" /> 
      <Param name="ShowABack" value="true" /> 
   </Transition> 
   <Transition nameID="62806" iconid="90" comment="Page Curl, lower right"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="PageCurlA" value="lowerright" /> 
      <Param name="ShowABack" value="true" /> 
      <Param name="FadeStartA" value="0.8" /> 
   </Transition> 
   <Transition nameID="62807" iconid="77" comment="Shatter, Right"> 
      <Param name="InternalName" value="ParticleSystem" /> 
      <Param name="ScatterDirection" value="right" /> 
      <Param name="SpinDirection" value="right" /> 
      <Param name="MaxParticles" value="200" /> 
   </Transition> 
   <Transition nameID="62808" iconid="78" comment="Shatter, up left"> 
      <Param name="InternalName" value="ParticleSystem" /> 
      <Param name="ScatterDirection" value="up, left" /> 
      <Param name="MaxParticles" value="64" /> 
      <Param name="ExponentialProgressDuration" value="0.4" /> 
      <Param name="ExponentialProgressScale" value="0.33" /> 
   </Transition> 
   <Transition nameID="62809" iconid="76" comment="Shatter, in"> 
      <Param name="InternalName" value="ParticleSystem" /> 
      <Param name="ScatterDirection" value="in" /> 
      <Param name="MaxParticles" value="600" /> 
      <Param name="SpinDirection" value="right" /> 
      <Param name="ParticleSpeed" value="40.0" /> 
      <Param name="ParticleSpinSpeed" value="0.5" /> 
      <Param name="ExponentialProgressDuration" value="0.9" /> 
      <Param name="ExponentialProgressScale" value="0.25" /> 
   </Transition> 
   <Transition nameID="62810" iconid="75" comment="Whirlwind, Fade"> 
      <Param name="InternalName" value="ParticleSystem" /> 
      <Param name="MaxParticles" value="200" /> 
      <Param name="SpinDirection" value="right" /> 
      <Param name="BothDirections" value="true" /> 
   </Transition> 
   <Transition nameID="62811" iconid="79" comment="Shatter, up right"> 
      <Param name="InternalName" value="ParticleSystem" /> 
      <Param name="MaxParticles" value="700" /> 
      <Param name="ScatterDirection" value="up, right" /> 
      <Param name="BothDirections" value="true" /> 
   </Transition> 
   <Transition nameID="62812" iconid="71" comment="Shrink vertical, then horizontal"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="ScaleA" value="smaller" /> 
      <Param name="ZScaleAStart" value="0.5" /> 
      <Param name="FadeStartA" value="0.5" /> 
   </Transition> 
</TransitionDLL> 

WMTFX 效果

<EffectDLL guid="{B4DC8DD9-2CC1-4081-9B2B-20D7030234EF}"> 
   <Effect nameID="62863" iconid="25" comment="Sepia tone"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="Desaturate" value="true" /> 
      <Param name="Red" value="0.10" /> 
      <Param name="Magenta" value="0.09" /> 
      <Param name="Yellow" value="0.25" /> 
      <Param name="contrast" value="1.0" /> 
   </Effect> 
   <Effect nameID="62864" iconid="18" comment="Negative"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="Invert" value="-1.0" /> 
   </Effect> 
   <Effect nameID="62865" iconid="20"  comment="Posterize"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="Posterize" value="6" /> 
   </Effect> 
   <Effect nameID="62866" iconid="29" comment="Threshold"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="Threshold" value="0.5" /> 
   </Effect> 
   <Effect nameID="62867" iconid="16" comment="Hue, Cycles Entire Color Spectrum"> 
      <Param name="InternalName" value="Hue" /> 
      <Param name="Value" value="0.0" /> 
      <Param name="EndValue" value="1.0" /> 
   </Effect> 
   <Effect nameID="62868" iconid="33" comment="Ease In"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="ScaleA" value="bigger" /> 
      <Param name="ExponentialProgressDuration" value="0.01" /> 
   </Effect> 
   <Effect nameID="62869" iconid="34" comment="Ease Out"> 
      <Param name="InternalName" value="Simple3D" /> 
      <Param name="ScaleA" value="smaller" /> 
      <Param name="InitialScaleA" value="bigger" /> 
      <Param name="ExponentialProgressDuration" value="0.01" /> 
   </Effect> 
   <Effect nameID="62870" iconid="35" comment="Mirror, Vertical"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="MirrorVertical" value="true" /> 
   </Effect> 
   <Effect nameID="62871" iconid="24" comment="Rotate 90"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="Rotate2DA" value="90" /> 
   </Effect> 
   <Effect nameID="62872" iconid="22" comment="Rotate 180"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="Rotate2DA" value="180" /> 
   </Effect> 
   <Effect nameID="62873" iconid="23" comment="Rotate 270"> 
      <Param name="InternalName" value="Standard" /> 
      <Param name="Rotate2DA" value="270" /> 
   </Effect> 
</EffectDLL> 

另请参阅

模糊效果

模糊效果通过自定义数量使图像模糊。它采用下列参数。

参数

类型

默认值

范围

说明

PixelRadius

float

2.0

0.0 to 25

数值越大,图片越模糊。

下列 XML 代码显示了 Windows Movie Maker 中包括的模糊效果:

<EffectDLL guid="{7312498D-E87A-11D1-81E0-0000F87557DB}" comment="Blur"> 
   <Effect nameID="62890" iconid="30" comment="Blur"> 
      <Param name="PixelRadius" value="2.5" /> 
   </Effect> 
</EffectDLL> 

另请参阅

亮度效果

亮度效果修改视频段的亮度。它采用下列参数。

参数

类型

默认值

范围

说明

Brightness

long

0

-255 to 255

用来修改亮度的数值,其中 0 表示没有变化。

下列 XML 代码显示了 Windows Movie Maker 中包括的亮度效果:

<EffectDLL guid="{5A20FD6F-F8FE-4a22-9EE7-307D72D09E6E}"> 
   <Effect nameID="62881" iconid="7" comment="Brightness increase"> 
      <Param name="Brightness" value="25" /> 
   </Effect> 
   <Effect nameID="62882" iconid="6" comment="Brightness decrease"> 
      <Param name="Brightness" value="-25" /> 
   </Effect> 
</EffectDLL> 

另请参阅

淡入淡出效果

淡入淡出效果使剪辑淡入淡出选择的纯色。它采用下列参数。

参数

类型

默认值

范围

说明

FadeIn

bool

0

0 or 1

0 表示该剪辑将淡出到 某种颜色;1 表示剪辑将从 某种颜色淡入。

FadeColor

long

0

0 to 0xFFFFFF

该数值可以用十六进制或二进制给出。以十六进制给出,该值将蓝色、绿色和红色值表示为 0xBBGGRR。(这不是印刷错误。蓝色值必须是第一个。)

下列 XML 代码显示了 Windows Movie Maker 中包括的旧胶片效果:

<EffectDLL guid="{EC85D8F1-1C4E-46e4-A748-7AA04E7C0496}"> 
   <Effect nameID="62877" iconid="11" comment="Fade Out, To black"> 
      <Param name="FadeIn" value="0" /> 
      <Param name="FadeColor" value="0" /> 
   </Effect> 
   <Effect nameID="62878" iconid="9" comment="Fade in, from black"> 
      <Param name="FadeIn" value="1" /> 
      <Param name="FadeColor" value="0" /> 
   </Effect> 
   <Effect nameID="62879" iconid="12" comment="Fade Out, to white"> 
      <Param name="FadeIn" value="0" /> 
      <Param name="FadeColor" value="16777215" /> 
   </Effect> 
   <Effect nameID="62880" iconid="10" comment="Fade in, to white"> 
      <Param name="FadeIn" value="1" /> 
      <Param name="FadeColor" value="16777215" /> 
   </Effect> 
</EffectDLL> 

另请参阅

旧胶片效果

旧胶片效果引入了颗粒状、涂抹和其他的视觉假象,使胶片看起来好像是旧的。它采用下列参数。

参数

类型

默认值

范围

说明

Age

long

0

0 to 100

旧胶片的年限。

Age 参数实际上是 10 个独立参数的组合。如果要单独设置这些参数,而不用 Age 参数,可以这样做。下面是 Age 包括的参数。

参数

类型

默认值

范围

说明

BlurAmount

long

0

0 to 255

值越大表示图像越模糊。

EdgeFade

long

0

0 to 255

值越大表示淡入淡出的边缘越大。

FilmJerkiness

long

0

0 to 255

胶片图像跳跃的程度,其中 0 最小,255 最大。

FlickerFrequency

long

0

0, 1 to 255

该效果设置中间固定间隙帧的暗度,数值越小,中间帧越暗,外观闪烁不定。0 表示看不见闪烁。

FrameSkips

long

0

0 to 255

显示下一个帧之前跳过的帧数。

Grey

bool

false

true,false

True 表示灰度(黑白)图像。

LineFrequency

long

0

0 to 255

在图像中移动白色“裂纹”或行的频率,其中 0 表示创建行的频率最低,255 表示最高。

LintFrequency

long

0

0 to 255

屏幕上“lint”或“tears”的频率,其中 0 表示创建的频率最低,255 表示最高。

NoiseFrequency

long

0

0 to 255

将噪音加到图像中,其中 0 表示产生的噪音最少,255 表示最多。

PosterizeBits

long

0

0 to 8

对图像应用多色调分色的数量,其中 0 表示最少,8 表示最大。

下列 XML 代码显示了 Windows Movie Maker 中包括的旧胶片效果:

<EffectDLL guid="{ADEADEB8-E54B-11d1-9A72-0000F875EADE}"> 
   <Effect nameID="62874" iconid="4" comment="Film Age, Oldest"> 
      <Param name="Age" value="90" /> 
   </Effect> 
   <Effect nameID="62875" iconid="3" comment="Older"> 
      <Param name="Age" value="60" /> 
   </Effect> 
   <Effect nameID="62876" iconid="2" comment="Old"> 
      <Param name="Age" value="30" /> 
   </Effect> 
</EffectDLL> 

另请参阅

过滤器效果

过滤器效果给出了与印刷媒体相关的多种效果。每种效果都有与之相关的大量参数,并通过一般性名程 Control1Value 经由 Control8Value 传递进来。并不是每种效果都使用所有的参数。效果不能组合。下表说明了所有效果的参数。

参数

类型

默认值

范围

说明

EffectID

long

0

0 or 1

使用的效果的 ID,在下一个表中进行了说明。

Control1Value

Control8Value

long

Varies by effect

0 or 1

该效果最多有 8 个自定义参数。

Transparency

long

0

0 to 100

添加效果的透明度,数值越大表示透明度越高。

RGBForeColor

string

黑色

Internet Explorer 接受的任何标准的 HTML 颜色字符串

取决于 EffectID。

RGBBackColor

string

白色

Internet Explorer 接受的任何标准的 HTML 颜色字符串

取决于 EffectID。

RGBExtraColor

string

黑色

Internet Explorer 接受的任何标准的 HTML 颜色字符串

取决于 EffectID。

TextureURL

string

Internet Explorer 接受的任何标准的 HTML 颜色字符串

应用于 ConteCrayon、RoughPastel、Texturizer 和 Underpainting 效果。

下表列出了 EffectID 参数指定的效果。

EffectID

效果名称

0

None

1

Accents

2

AngledStrokes

3

BasRelief

4

Mosaic

5

ChalkAndCharcoal

6

Charcoal

7

Chrome

8

ColoredPencil

9

Craquelure

10

Crosshatch

11

Cutout

12

DarkStrokes

13

DiffuseGlow

14

DryBrush

15

Emboss

16

FilmGrain

17

InkOutline

18

NotePaper

19

Fresco

20

GlowingEdges

21

Grain

22

HalftoneScreen

23

Patchwork

24

NeonGlow

25

PaintDaubs

26

PaletteKnife

27

Plaster

28

PlasticWrap

29

PosterEdges

30

Ripple

31

Reticulation

32

SmudgeStick

33

Sponge

34

SprayedStrokes

35

Stamp

36

Photocopy

37

Sumie

38

GraphicPen

39

TornEdges

40

Watercolor

41

WaterPaper

42

StainedGlass

43

Glass

44

Texturizer

45

Underpainting

46

ConteCrayon

47

RoughPastel

48

Spatter

下列 XML 代码显示了 Windows Movie Maker 中包括的过滤器效果:

<EffectDLL guid="{E673DCF2-C316-4c6f-AA96-4E4DC6DC291E}" > 
   <Effect nameID="62886" iconid="13"> 
      <Param name="EffectID" value="16" comment="Film Grain" /> 
      <Param name="Control1Value" value="4" /> 
      <Param name="Control2Value" value="0" /> 
      <Param name="Control3Value" value="10" /> 
   </Effect> 
   <Effect nameID="62887" iconid="27" comment="Smudge Stick"> 
      <Param name="EffectID" value="32" /> 
      <Param name="Control1Value" value="2" /> 
      <Param name="Control2Value" value="0" /> 
      <Param name="Control3Value" value="10" /> 
   </Effect> 
   <Effect nameID="62888" iconid="14" comment="Graphic Pen"> 
      <Param name="EffectID" value="38" /> 
      <Param name="Control1Value" value="15" /> 
      <Param name="Control2Value" value="0" /> 
      <Param name="Control3Value" value="40" /> 
   </Effect> 
   <Effect nameID="62889" iconid="30" comment="Watercolor"> 
      <Param name="EffectID" value="40" /> 
      <Param name="Control1Value" value="9" /> 
      <Param name="Control2Value" value="1" /> 
      <Param name="Control3Value" value="1" /> 
   </Effect> 
  </EffectDLL> 

另请参阅

镜像和灰度效果

该对象提供两个功能:创建镜像图像,并将彩色图像改为灰度。该对象采用下列参数。

参数

类型

默认值

范围

说明

Mirror

long

0

0 or 1

值为 1 表示图片应该水平翻转。

GrayScale

long

0

0 or 1

值为 1 表示颜色应改为灰度,创建一个黑白图像。

下列 XML 代码显示了 Windows Movie Maker 中包括的镜像和灰度效果:

<EffectDLL guid="{4CCEA634-FBE0-11D1-906A-00C04FD9189D}" comment="Pixelate"> 
   <Effect nameID="62818" iconid="19" comment="Pixelate"> 
      <Param name="MaxSquare" value="25" /> 
   </Effect> 
</EffectDLL> 

另请参阅

像素化效果

像素化效果将图像粗化成单独的纯色方格,表示该区域原先像素的平均颜色。它采用下列参数。

参数类型默认值范围说明

MaxSquare

long

50

2 to 50

数值越大,方格越大,图片越粗糙。

下列 XML 代码显示了 Windows Movie Maker 中包括的像素化效果:

<EffectDLL guid="{4CCEA634-FBE0-11D1-906A-00C04FD9189D}" comment="Pixelate"> 
   <Effect nameID="62818" iconid="19" comment="Pixelate"> 
      <Param name="MaxSquare" value="25" /> 
   </Effect> 
</EffectDLL> 

另请参阅

速度效果

速度效果加速或减缓视频的播放。速度效果不能用于暂停或后退操作。这些效果不依赖于某个实际的 GUID,而是传递空 GUID。速度效果可引起帧跳跃,所以选择的值过大将导致令人不满意的结果。该效果采用下列参数。

参数

类型

默认值

范围

说明

Speed

float

1.0

大于 0.0

值为 1.0 表示正常速度,小于 1.0 表示速度较慢,大于 1.0 表示速度较快。

下列 XML 代码显示了 Windows Movie Maker 中包括的速度效果:

<EffectDLL guid="{00000000-0000-0000-0000-000000000000}"> 
   <Effect nameID="62861" iconid="32" speed="2.0" comment="Speed up"></Effect> 
   <Effect nameID="62862" iconid="31" speed="0.5" comment="Slow down"></Effect> 
</EffectDLL> 

另请参阅

将自定义图标添加到 Windows Movie Maker 中

可以将自定义图标添加到 Windows Movie Maker 的自定义效果和过渡中。这些图标是作为 C++ 项目中的资源文件创建的,并编译为 DLL。如果不提供任何自定义过渡或效果代码,则该项目将只包括图标资源文件。

Windows Movie Maker 可以使用由一个或多个图标组合在一起而构成的单个位图图像。Windows Movie Maker 自动将图像分割成宽 96 像素、高 84 像素的段,每段就是一个图标。顶部和底部的 6 个像素应该保留为空以便用于图像填充,它将可见图标大小修整为 96 x 72 (3 x 4) 的段。Windows Movie Maker 为每个段分配一个标识号,从 0 开始,增量为 1,它说明图标“跳跃”到条中的次数。在 XML 文件中指定要为每种效果使用哪个图标。可使用所有的自定义图标,或者所有的 Windows Movie Maker 标准图标,但不能将两种类型混合。下图显示了图标的位图图像条的布局。

ms867186.moviemakersfx1(zh-cn,MSDN.10).gif

在上图中,效果或过渡可将笑脸图标设为 iconid = 0,而将太阳图标的标识号设为 4。

在创建图标条时,顶部和底部的 6 像素应是纯白的,因为这个空白部分将被修整为 4 x 3 的缩略图以显示在情节串连图板中。纯白 (255,255,255) 在显示时是透明的。

要添加自己的图标,必须将两个额外的属性添加到 TransitionsAndEffects 标记中:

  • SpecialIconFileID 该属性只在包含您自己的自定义图标时才在 XML 文件中使用。它应是从 1 到 8192 的一个唯一数字。这个数字对于所有其他自定义 Windows Movie Maker XML 文件中的所有 SpecialIconFileID 属性来说必须是唯一的,否则就没有意义。

  • SpecialIconResourceID 该属性只在包含您自己的自定义图标时才在 XML 文件中使用。这是分配给自定义 DLL 中图标位图资源的数值。可以在 Visual Studio 项目的资源文件中找到该数值。

下面是指定自定义图标的 XML 代码:

<TransitionsAndEffects Version="1.0" SpecialIconFileID="22" SpecialIconResourceID="101"> 

为效果和过渡创建自定义图标

  1. 打开 Visual Studio ,创建一个新的 C++ 项目。如果只是创建 DLL 来保存图标,那么创建一个新的 Win32 项目,当要求进行设置时,选择一个编译为 DLL 的空项目。

  2. 将新资源添加到该项目中。当询问何种资源时,选择“bitmap”。

  3. 绘制或导入资源编辑器中的位图。最大的图标大小是宽 96 像素、高 84 像素(包括顶部和底部的 6 像素白色缓冲区)。Windows Movie Maker 从左下角测量图像:如果图像过高,则将裁剪掉多余的部分;如果图像过宽,则将把多余部分分配给下一个更高的图标。如果图像宽度小于 96 像素,则 Windows Movie Maker 将包含下一个图标的一部分。将所需数量的图标图像插入到这些 96 像素宽的窗口中。

  4. 注意分配给 resource.h 文件中的位图的 ID。这将分配给 SpecialIconResourceID 属性。例如,下面的行显示了已经分配 101 作为其标识符的位图:

       #define IDB_BITMAP1                     101 
    
  5. 编译 DLL,将它与 \AddOnTFX 文件夹中的 XML 文件放在一起。图像 DLL 必须与使用这些图标的 XML 文件名称相同。例如,如果 DLL 名为 MyIcons.dll,则 XML 文件必须为 MyIcons.xml。

  6. 在 XML 文件中,将 SpecialIconFileID 属性添加到 TransitionsAndEffects XML 标记中,并为之分配一个从 1 到 8192 的唯一整数。只要其他 XML 效果文件没使用该整数进行标识,那么该整数的值并不重要。

  7. SpecialIconResourceID 属性添加到 TransitionsAndEffects 标记中,并将 Visual Studio 分配给位图的数值分配给它:在本示例中是第 4 步中显示的 101。

  8. 在每个过渡或效果 XML 块中,将 iconid 属性添加到 Transition 标记中,选择到位图的偏移量,从 0(即图标所处的位置)开始。这些数字不必是连续的,可以跳过区域。

下面的 XML 代码片断显示了使用某位图图像中第一个和第三个图标的两个自定义过渡,DLL 的 ID 为 101,唯一的 ID 22 分配给了该文件:

<TransitionsAndEffects Version="1.0" SpecialIconFileID="22" SpecialIconResourceID="101"> 
   <Transitions> 
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}"> 
         <Transition name="Grow, custom icon 1" iconid="0"> 
            <Param name="InternalName" value="Simple3D" /> 
            <Param name="ScaleA" value="bigger" /> 
            <Param name="ExponentialProgressDuration" value="3.0" /> 
            <Param name="ExponentialProgressScale" value="1.0" /> 
         </Transition> 
      </TransitionDLL> 
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}"> 
         <Transition name="Grow, custom icon 3" iconid="2"> 
            <Param name="InternalName" value="Simple3D" /> 
            <Param name="ScaleA" value="bigger" /> 
            <Param name="ExponentialProgressDuration" value="3.0" /> 
            <Param name="ExponentialProgressScale" value="2.0" /> 
         </Transition> 
      </TransitionDLL> 
   </Transitions> 
</TransitionsAndEffects> 

仅当使用 DLL 保存图像时,XML 的文件名和 DLL 的文件名才必须匹配。如果 DLL 不保存图像(正如当它保存自定义效果和过渡对象时一样),它们的名称不需要匹配。

创建新的过渡和效果对象

除了修改现有的过渡和特殊效果,还有可以创建一个全新的过渡和效果。这些对象称为 DirectX Transforms (DXT),创建它们需要了解相当多的 COM 与 DirectX 编程知识,以及 ATL 知识,本节只简要地加以介绍。要了解在何处可以阅读有关 DXT 的信息,请参阅更多信息

该下载内容包括两个可用来创建新的过渡和效果对象的 Visual Studio 项目;一个是 Visual Studio .NET 版本,另一个是 Visual Studio 6.0 版本。如果使用 6.0 版本的项目,还必须安装 Microsoft DirectX 7.0 SDK,以获得该项目所必需的头文件。可以在更多信息中显示的位置处找到它。

另外,这两个项目都需要安装有 Microsoft DirectX Media SDK,可以从 Microsoft 网站获得。

与本文档相关的可下载、可执行文件是一个自解压文件组和文件夹。下载的项目包括下列文件:

  • C++ 项目文件,包含几种示例效果的代码

  • 将这些效果和一些其他效果加载到 Windows Movie Maker 中的 XML 文件

  • 介绍每个文件内容的 Readme.txt

  • 介绍安装过程的 HowToInstall.txt

  • MMSTFX.dll,是该项目将要创建的已经编译过的示例 DLL。

运行自解压程序将会创建一个包含项目和文本文件的顶级 MMSTFX 文件夹、一个包含 DLL 的 MMSTFX\Bin 文件夹,以及一个包含 XML 文件的 MMSTFX\XML 文件夹。

示例 C++ 代码会在名为 MMSTFX.dll 的 DLL 中创建一种新效果 (Blue Adjust) 和一种新过渡 (Melt)。同时还包括修改随 Windows Movie Maker 提供的效果的 XML 文件。这些“新”效果包括“Page Curl, Down Left”、“Page Curl, Down Right”、“Blur, Super”、“Brightness, Super Increase”、“Brightness, Super Decrease”和“Whirlwind, Down, Small Blocks”。有关这些对象的详细信息可以在下载软件包中包含的 ReadMe.txt 文件中找到。

要在 Visual Studio 6.0 中打开该项目,双击 MMSTFX.dsp 文件。要在 Visual Studio .NET 中打开该项目,双击 MMSTFX.vcproj 文件。

如果您收到不能编译 DXTrans.idl 的错误消息,一定要确保您列出了您的计算机上 DXMedia\include 文件夹的路径。该路径应该在 Tools > Options > Projects > VC++ Directories 对话框中指定。

打开和编译示例 DLL 后,就可以调试模式运行程序。您将会收到一个警告对话框,指出该项目不包含 Windows Movie Maker 程序的调试符号;单击 OK。当询问要附加到哪一个程序时,导航到 moviemk.exe 程序文件并选择该文件。

示例代码概述

下图显示了示例代码中提供的重要类。

ms867186.moviemakersfx2(zh-cn,MSDN.10).gif

下面介绍示例代码中的类与对象:

CMMSampleEffectCMMSampleTransition

这些是示例的顶级效果和过渡 DXT 类。CMMSampleEffect 实现 Blue Adjust 示例效果;CMMSampleTransition 实现 Melt 示例过渡。这些类可以被修改以更改示例,或者被复制和修改以创建新的效果或过渡。Windows Movie Maker 利用分配给每个类的 GUID 和 COM 创建这些类。这些类创建一个帮助器对象,通过调用 CreateSpecialEffectByName 来处理视频:CMMSampleEffect 创建 CMMSpecialEffect,而 CMMSampleTransition 创建 CMMSimple3DSpecialEffect。输入缓冲区的默认数量为 1(效果允许的唯一数量值),但 CMMSampleTransition 将该值增加到 2(过渡的正确数量)。

CMMSpecialEffectDXT

处理 Windows Movie Maker 和视频处理类(CMMSpecialEffect 或者它的继承类)之间的通信和缓冲操作。

CVideoPlane

这是一种三维效果使用的工具类,用来在单个平面上绘制输入视频。

CMMSpecialEffect

这是二维效果和过渡使用的图形对象的基类。Blue Adjust 示例效果直接利用该类将视频的色调设置为蓝色。Melt 示例过渡使用一个派生类 CMM3DSpecialEffect,它适用于三维操作。当创建二维效果或过渡时,从该类继承并覆盖它的 Execute 方法。

CMM3DSpecialEffect

这是一种用于三维效果或过渡的基类。它在输出缓冲区上创建纹理和一个呈现表面。要创建新的效果或过渡,覆盖下面的方法:CreateSceneRenderSceneReleaseSceneCreateSurfacesRestoreSurfacesReleaseSurfacesExecute 方法覆盖 CMMSpecialEffect 中的方法,处理低级逻辑;您不要自行覆盖它。要修改或创建一个新的效果或过渡,应该覆盖 RenderSceneCMM3DSpecialEffect 不呈现三维对象;这是由 CSimple3DSpecialEffect 完成的。

CSimple3DSpecialEffect

用于三维效果和过渡呈现的顶级类。它呈现 Melt 示例过渡。该类覆盖了它的基类中的几个函数,并创建了一个基于 CVideoPlane 的帮助器对象。要新建一个基于 Direct3D 的效果或过渡,可以更改或创建一个继承该类的新类。

开始创建一种新效果

利用示例中提供的代码作为开端是一种开发自己的效果或过渡的不错方法。为了用自己的效果替代 Blue Adjust 效果,首先要查看 CMMSpecialEffect.cpp 和 CMMSpecialEffect.h 文件。在效果的生存期内,InitializeTerminate 方法各被调用一次,而每次呈现一个新视频帧时就要调用一次 Execute 方法。要创建一种新效果,可以实现一个继承 CMMSpecialEffect 类的类,并覆盖 InitializeExecuteTerminate 方法。

反过来,CMMSampleEffect 类又继承了 CMMSpecialEffectDXT 类,它调用 CreateSpecialEffectByName 来创建一个图形对象 CMMSpecialEffect。如果定义了一个新 DXT,就可以通过改变 CreateSpecialEffectByName 函数的行为来修改该对象。由这些类和对象来处理创建新效果需要完成的大量乏味工作。

CMMSampleEffectCMMSampleTransition 类引用一个 CoClass GUID,它和描述新的或修改效果的附加 XML 文件中指定的 GUID 相同。当开发自己的效果或过渡时,应当复制和重命名 CMMSampleEffectCMMSampleTransition 类,并生成一个用于该类和 XML 文件的新 GUID,这样就保证了使用的 GUID 的唯一性。利用 Visual Studio 提供的 Guidgen 工具来生成一个新 GUID。COM 对象在描述它们的 .idl 文件中、包含有它们的注册信息的 .rgs 文件中,以及由 .idl 文件生成的 .h 文件中引用它们的 GUID。更改 GUID 时,必须搜索出整个项目中引用原先的 GUID的地方。Windows Movie Maker 显示效果需要的 XML 文件也必须进行更新以使用新的 GUID。

开始创建一种新过渡

编写一种新过渡通常比编写一种新效果需做的工作要多。Melt 示例利用 Direct3D 来控制图像并呈现结果。Direct3D 需要的初始化和执行代码相当多,这些代码由 Melt 示例中的 CSimple3DSpecialEffect 类提供,该类继承了 CMM3DSpecialEffect,而它反过来又继承了 CMMSpecialEffect。类似于 Blue Adjust 代码,要创建自己的过渡,应该继承 CMM3DSpecialEffect 类并覆盖 CreateSceneReleaseSceneRenderScene 方法。CreateSceneReleaseScene 只被调用一次;而每次呈现一个新帧时都要调用 RenderScene

与 Melt 示例不同,如果您的过渡需要管理三维顶点缓冲区,可能还需要覆盖 CMM3DSpecialEffect 类中的其他三种方法。这三种方法是 CreateSurfacesRestoreSurfacesReleaseSurfaces

InitializeTerminateExecute 方法在使用 CMM3DSpecialEffect 类时不应被覆盖,因为该类自身已经覆盖了这些方法。

同时,应该复制和重命名 CMMSampleTransition 类,并为其提供一个新 GUID。

对于绘图,Melt 示例利用继承 CMM3DSpecialEffectCSimple3DSpecialEffect 来创建过渡,但是这些类也可以用来创建三维效果,例如 Blue Adjust。Windows Movie Maker 中效果和过渡的唯一区别是视频输入源的数量不同—对于效果有一个,而对于过渡有两个。默认情况下,输入数量设置为 1,但 CMMSampleTransitionFinalConstruct 方法将该值设置为 2。

对象与效果或过渡关联后,没有从注册表删除所有对其 GUID 的引用,就不能将该对象更改为其他类型。在 Windows Movie Maker 2 启动时,DirectShow 将存储注册表中效果或过渡的类型。

要不使用 Direct3D 来创建一种新过渡,修改 CMMSpecialEffectDXT 类的 CreateSpecialEffectByName 方法来创建一个 CMMSpecialEffect 对象(或者一个继承 CMMSpecialEffect 类的对象),避免对 Direct3D 界面和方法的任何调用。

将方法划分为两个类 CMMSpecialEffectCSimple3DSpecialEffect 中,可使示例更清楚。如果代码的简洁性和优化性非常重要的话,可以将这两个类组合成一个类。

向 DLL 传递参数

将参数从 XML 文件传递给 C++ DLL 将使您的特殊效果用户能够根据自己的爱好修改它。

第一步是将这些参数的属性添加到 .IDL 文件中。例如,下面的代码公开了对象的 Blue 和 MeltIntensity 参数:

interface IMMSampleTFX : IDXEffect 
{ 
[propget] HRESULT Blue([out,retval] float* pfBlue); 
[propput] HRESULT Blue([in] float fBlue); 
[propget] HRESULT MeltIntensity([out,retval] float* pfMeltIntensity); 
[propput] HRESULT MeltIntensity([in] float fMeltIntensity); 
}; 

请注意 CMMSpecialEffectDXT 是如何继承 IMMSampleTFX 界面的,它公开了 Blue 和 MeltIntensity 参数:

class CMMSpecialEffectDXT :  
    public CDXBaseNTo1, 
    public IDispatchImpl<IMMSampleTFX, &IID_IMMSampleTFX, &LIBID_MMFXLib>, 
    public IObjectSafetyImpl2<CMMSpecialEffectDXT> 

下一步是编写四种方法的代码,例如:

STDMETHODIMP CMMSpecialEffectDXT::put_Blue(float fBlueAmount) 
{ 
   m_fBlueAmount = fBlueAmount; 
   return S_OK; 
} 

在 XML 文件中,使用下面的语句 Windows Movie Maker 就可以使用 Blue 效果:

<TransitionsAndEffects Version="1.0"> 
   <Effects> 
      <EffectDLL guid="{294D0DE1-1B57-408d-A33F-FA708A5A28D6}"> 
         <Effect name="Blue Color Adjust" iconid="12"> 
            <Param name="Blue" value="2.0" /> 
         </Effect>  
      </EffectDLL> 
   </Effects> 
</TransitionsAndEffects> 

然后,Windows Movie Maker 利用 GUID 来识别查找的是哪一个 DLL,用效果名来识别效果,然后用参数名来识别要更改哪一种属性。名为“Blue”的参数将会识别先前介绍的 put_Blue 方法。

调试 DLL

调试 DLL 与调试任何其他的程序非常类似;但是必须在项目的设置中将可执行文件的名称更改为 Windows Movie Maker。最简单的方法就是将 moviemk.exe 指定为希望调试的可执行文件。有关更多信息,请参阅 MSDN 库中的Debugging: DLLs。

将 Blue Adjust 效果更改为 Purple Adjust

通过在代码中添加一个红色参数,可以将提供的 Blue Adjust 效果更改为 Purple Adjust,该红色参数调整呈现图像中的红色数量。该效果利用示例中现有的代码修改红色通道。可以在 XML 中独立地设置新的红色参数,从而创建紫色(或者红色,或者蓝色,或者两者的任何组合色)。本节介绍如何修改 C++ 和 XML 文件来添加红色参数。

示例 Blue Adjust 效果使用 DXLookupTable 对象(来自 DXMedia SDK)来增加图像中蓝色的数量。该对象可以平衡颜色、改变亮度、对比度或灰度系数,并应用阈值与多色调分色效果。我们将限制对增加红色和蓝色的数量的更改以创建紫色。

要添加红色参数,只需复制蓝色参数代码并为新的红色参数添加类似的函数和成员。下面的步骤说明了必须添加的代码。

在 MMSpecialEffect.cpp 文件的 CMMSpecialEffect::InitStandardOperations 函数中,找到下面的行:

RTN_HR_IF_FAILED(m_pDXT->get_Blue(&fValue)); 
if (!IsEqual(fValue, 0.0f)) 
{ 
   m_fBlue = fValue; 
} 

添加下面的代码片段,可获得红色值:

RTN_HR_IF_FAILED(m_pDXT->get_Red(&fValue)); 
if (!IsEqual(fValue, 0.0f)) 
{ 
   m_fRed = fValue; 
} 

在 MMSpecialEffectDXT.h 文件中,找到蓝色属性的 get 与 put 方法的声明,并添加完全相同的红色方法的声明,它以粗体显示:

STDMETHOD(get_Blue)(float* pfBlue); 
STDMETHOD(put_Blue)(float fBlue); 
STDMETHOD(get_Red)(float* pfRed); 
STDMETHOD(put_Red)(float fRed); 

在 MMSpecialEffectDXT.cpp 文件中,复制 put_Blueget_Blue 方法的定义,并添加两个名为 put_Redget_Red 的完全相同的方法,将所有 ...Blue... 值重命名为 ...Red...。

在 MMSpecialEffectDXT.h 文件中,声明一个成员变量 m fRedAmount 和 m fBlueAmount 完全相同,它以粗体显示:

float m_fBlueAmount; 
float m_fRedAmount; 

在 MMSpecialEffectDXT.cpp 文件中 CMMSpecialEffectDXT 的 FinalConstruct 方法中,在初始化蓝色成员的同一位置初始化该新的红色成员变量,它以粗体所示:

m_fBlueAmount = 0.0f; 
m_fRedAmount = 0.0f; 

在 MMSTFX.idl 文件中,找到蓝色属性声明,按如下所示添加完全相同的红色声明:

[propget] HRESULT Blue([out,retval] float* pfBlue); 
[propput] HRESULT Blue([in] float fBlue); 
[propget] HRESULT Red([out,retval] float* pfRed); 
[propput] HRESULT Red([in] float fRed); 

最后,要将这个新的 Purple Color Adjust 效果添加到 Windows Movie Maker 界面中,必须添加调用它的 XML 代码。找到示例项目中包含的 BlueAdjust.xml 文件。在 \AddOnTFX 目录中 BlueAdjust.xml 的旁边创建该文件的副本,将该文件重命名为 PurpleAdjust.xml。打开该新文件,找到名称 Blue Color Adjust 的效果,将 name 参数值更改为“Purple Color Adjust”,并按如下所示添加 Red 参数:

<Param name="Blue" value="2.0" /> 
<Param name="Red" value="1.5" /> 

可以保留 BlueAdjust.xml 文件,该文件将调用同样的 TFX,但只是不修改红色值,或者可以将两种效果合并到一个 XML 文件中。

m_fRed值应用到 DXLookupTable 对象中的其他必需代码已经在示例代码中的 CMMSpecialEffect::InitStandardOperations 方法中提供,该方法调用 SetColorBalance 方法来修改红色通道值。

编译更改。当构建完项目后,运行 Windows Movie Maker,打开效果区域并向下滚动找到 Purple Color Adjust 效果。可以尝试自己添加一个绿色参数。

词汇表

下面的术语是本文档中使用的术语,通常在为 DirectX 或 Windows Movie Maker创建效果或过渡时更为常用。

AddOnTFX

放置扩展 Movie Maker 的过渡和效果的 XML 文件的目录名称。例如,C:\Program Files\Movie Maker\Shared\AddOnTFX。必须创建该目录。

DXT

DirectX Transform。用 DirectX Media SDK 构建的对象,用于构建特殊效果。Movie Maker 使用安装在系统上并在 XML 文件中引用的 DXT。

输出视频缓冲区

效果或过渡的每帧所写入的内存缓冲区。

跨度

以字节为单位,表示某个位图行起始位置和下一个位图行起始位置的两个内存地址之间的距离。

呈现

将视频输出绘制到输出视频缓冲区中。

特殊效果

用于 Windows Movie Maker 过渡和效果的通用术语,用来提高视觉满意度。

视频缓冲区 A

过渡的第一个输入缓冲区,或效果的唯一输入缓冲区。效果从该缓冲区中读取每一帧的每个像素,并将结果写入输出缓冲区中。对于过渡,这就是转换视频的“起点”。Movie Maker 在本地使用 24 位 RGB,尽管在 DXT 中可能使用 32 位。

视频缓冲区 B

过渡中的第二个输入缓冲区。这就是转换视频图像的“目的地”。

更多信息

  • 请参阅 DirectShow SDK 文档,获得有关 SMPTE 擦除的更多信息。

  • Microsoft 网站上的 MSDN 库中有关创建 DirectX Transforms 的文章,以及有关 COM 和 ATL 的文档。

  • DirectX Transform SDK 包含用来创建效果和过渡的文档和对象。该 SDK 是作为 DirectX 6.0 SDK 的一部分而安装的,也称为 DirectX Media SDK 或 DirectX Media 6.0 SDK,可以从 Microsoft 网站上获得。利用该 SDK 打包的对象,可以创建自己的转换或效果对象。版本 7 的头文件包含在 Visual Studio .NET 和 DirectX Transform SDK 中,但是只有 DirectX 7.0 SDK 中有文档,该文档已不能再从 Microsoft 网站上获得。

  • 几个新闻组涉及 Windows Movie Maker 和 DirectX 编程的内容。下面的两个组可用于不同的目的:

    • microsoft.public.windowsxp.moviemaker 是一个涉及 Windows Movie Maker 问题的新闻组,并且对于 XML 问题可能是适当的;

    • microsoft.public.multimedia.directx.dshow.programming 是一个涉及 DirectShow 编程技术方面的新闻组,包括 DirectX Media SDK。

转到原英文页面