查看完整版本: [-- APlayer 的 GIF 动画截取功能介绍 --]

APlayer 开发者论坛 -> APlayer 讨论区 -> APlayer 的 GIF 动画截取功能介绍 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

aplayer 2014-06-28 11:17

APlayer 的 GIF 动画截取功能介绍

APlayer 要截取 GIF 动画是挺方便的,使用方法如下:
1、打开文件播放;
2、SetPosition 到你想要截取动画的开始位置;
3、设置图像截取格式为 GIF 动画,即调用 SetConfig(707, "4");
4、设置要截取的动画高度宽度,例如截取 320x240 的动画调用 SetConfig(703, "320") 和 SetConfig(704, "240");
5、设置 GIF 参数:SetConfig(709, "length=6000;cutinterval=200;playinterval=100"),
      其中 length 等于截取时长,cutinterval 为截取间隔,playinterval 为播放间隔,单位均为毫秒;
6、开始截取 GIF 动画,例如截取到 C:\test.gif,即调用 SetConfig(702, "C:\test.gif"),然后 APlayer 进入 GIF 截取过程。
7、如果 APlayer 截取 GIF 动画完毕,会发送事件 OnEvent(10005, 0) 通知调用者截取完毕,这时 C:\test.gif 就已经生成。

下面是 APlayer 截取的《阿凡达》影片的 GIF 片段:
[attachment=204]


windows 2014-08-02 03:56
这功能不错。

feiguohashao 2014-08-13 18:03
  这个可以有啊  

liu123204207 2014-12-22 08:51
.版本 2
.支持库 shell
截不出来是咋回事啊
通用对话框1.打开 ()
Open (aplayer, 通用对话框1.文件名)
SetPosition (aplayer, 1111)
SetConfig (aplayer, 707, “4”)
SetConfig (aplayer, 703, “320”)
SetConfig (aplayer, 704, “240”)
SetConfig (aplayer, 709, “length=6000;cutinterval=200;playinterval=100”)
SetConfig (aplayer, 702, 取特定目录 (3) + “\123.gif”)

aplayer 2014-12-22 12:19
liu123204207:.版本 2
.支持库 shell
截不出来是咋回事啊
通用对话框1.打开 ()
Open (aplayer, 通用对话框1.文件名)
....... (2014-12-22 08:51)

搂主,因为 APlayer 打开一个文件是需要时间的,为了防止界面阻塞,APlayer 的 Open  是一个异步过程,
调用后立刻调用 SetPosition 和进行 GIF 截图操作是无效的,要等 OpenSucceeeded 事件后才可以
如果你想从一打开就从某一个中间的地方开始播放,可以用 102 - Start position 这个参数;
另外,GIF 截取是一个过程,调用后,需要等待 GIF 截取完成的事件:OnEvent(10005, 0)  ,这之后调用者就可以去拿取图像了。




mldonkey 2015-06-25 18:13
这个可以有啊  

yjjstc2016 2016-08-24 10:33
        private void button1_Click(object sender, EventArgs e)
        {
            axPlayer1.SetConfig(102,textBox1.Text);
            axPlayer1.Open(filen);
            allright = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
             this.Text = "GIF截取中..." + axPlayer1.GetConfig(712);
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            axPlayer1.SetConfig(15,"1");
            axPlayer1.SetConfig(12, "1");
            textBox1.Text = start;
            textBox2.Text = (Convert.ToInt32(start) + 6000).ToString();
            string str = System.AppDomain.CurrentDomain.BaseDirectory;
            axPlayer1.SetConfig(2, str + "Yj");
            Bitmap bmp = Properties.Resources.aa;
            axPlayer1.SetCustomLogo(bmp.GetHbitmap().ToInt32());
        }

        private void axPlayer1_OnStateChanged(object sender, AxAPlayer3Lib._IPlayerEvents_OnStateChangedEvent e)
        {
        }
        private void jiequ()
        {
                axPlayer1.SetConfig(707, "4");
                axPlayer1.SetConfig(703, "800");
                axPlayer1.SetConfig(704, "600");
                int i = Convert.ToInt32(textBox2.Text) - Convert.ToInt32(textBox1.Text);
                axPlayer1.SetConfig(709, "length=" + i.ToString() + ";cutinterval=200;playinterval=100");
                axPlayer1.SetConfig(702, "截图.gif");
            if (axPlayer1.GetConfig(711) != "1")
            {
                MessageBox.Show("失败");
            }
            else
            {
                timer1.Start();
            }
        }

        private void axPlayer1_OnEvent(object sender, AxAPlayer3Lib._IPlayerEvents_OnEventEvent e)
        {
            if (e.nEventCode == 10005 && e.nEventParam == 0)
            {
                MessageBoxEx.Show("截取成功!");
            }
        }

        private void axPlayer1_OnOpenSucceeded(object sender, EventArgs e)
        {
            jiequ();
        }


这为什么不能截取啊

aplayer 2016-09-01 03:08
yjjstc2016:        private void button1_Click(object sender, EventArgs e)
        {
            axPlayer1.SetConfig(102,textBox1.T .. (2016-08-24 10:33) 

你刚调用完 702 立即调用 711 未必能取到 “1” 的返回值,截取是另一个线程,可能延时一会开始,所以你要以截取事件和截取进度参数为准。

随遇而安 2019-11-24 15:39
axPlayer1.SetConfig(707,"4");
axPlayer1.SetConfig(709,"length=6000;cutinterval=200;playinterval=100");
axPlayer1.SetConfig(702,"C:\\snapshot.gif");
为什么截取出来的GIF图很小,只有33K,而且打不开

aplayer 2019-11-28 12:44
随遇而安:axPlayer1.SetConfig(707,"4");
axPlayer1.SetConfig(709,"length=6000;cutinterval=200;playinterval=100");
axPlayer1.SetConfig(702,"C:\\snapshot.gif");
为什么截取出来的GIF图很小,只有33K,而且打不开 (2019-11-24 15:39) 

GIF截取是异步的,你要等到GIF截取结束事件,出来的文件才是有效的。

tpansoft 2020-12-23 18:34
哈哈,慢慢的都没你们玩坏了

yelang1 2023-04-16 00:10
[attachment=3428] 截图功能根本无法使用 求管理员告知,具体是什么原因呢》有没有一个例子啊?

18639522576 2023-06-07 15:45
aplayer:GIF截取是异步的,你要等到GIF截取结束事件,出来的文件才是有效的。 (2019-11-28 12:44) 

我想获取视频的每一帧图片,这个怎搞呢?我想在播放视频的同时,获取到视频的每一帧BitMap 传向一个智能分割的类库,去处理一些业务,将画面上的不同事物分割出来。并更新到界面上,之前用的vlc,那个截图也个本地文件类型的,这个Aplayer 可以将图片 弄到内存中直接使用吗?

aplayer 2023-06-08 21:21
18639522576:我想获取视频的每一帧图片,这个怎搞呢?我想在播放视频的同时,获取到视频的每一帧BitMap 传向一个智能分割的类库,去处理一些业务,将画面上的不同事物分割出来。并更新到界面上,之前 .. (2023-06-07 15:45) 

可以,你可以写一个 APlayer 插件,然后通过 SetConfig(209, "0") 禁用硬解,视频解码出的每一帧就会回调你的插件,插件的写法见 APlayerSDK 中的 PluginDemo 例子,路径是:APlayerSDK\samples\PluginDemo。


查看完整版本: [-- APlayer 的 GIF 动画截取功能介绍 --] [-- top --]


Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.008264 second(s),query:0 Gzip enabled