• 29192阅读
  • 13回复

APlayer 的 GIF 动画截取功能介绍 [复制链接]

上一主题 下一主题
离线aplayer
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2014-06-28
— 本帖被 aplayer 执行加亮操作(2015-02-14) —
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 片段:


离线windows

只看该作者 沙发  发表于: 2014-08-02
这功能不错。
离线feiguohashao

只看该作者 板凳  发表于: 2014-08-13
  这个可以有啊  
离线liu123204207

只看该作者 地板  发表于: 2014-12-22
.版本 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

只看该作者 4楼 发表于: 2014-12-22
回 liu123204207 的帖子
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

只看该作者 5楼 发表于: 2015-06-25
这个可以有啊  
xxxx
离线yjjstc2016

只看该作者 6楼 发表于: 2016-08-24
        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

只看该作者 7楼 发表于: 2016-09-01
回 yjjstc2016 的帖子
yjjstc2016:        private void button1_Click(object sender, EventArgs e)
        {
            axPlayer1.SetConfig(102,textBox1.T .. (2016-08-24 10:33) 

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

只看该作者 8楼 发表于: 2019-11-24
axPlayer1.SetConfig(707,"4");
axPlayer1.SetConfig(709,"length=6000;cutinterval=200;playinterval=100");
axPlayer1.SetConfig(702,"C:\\snapshot.gif");
为什么截取出来的GIF图很小,只有33K,而且打不开
离线aplayer

只看该作者 9楼 发表于: 2019-11-28
回 随遇而安 的帖子
随遇而安: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截取结束事件,出来的文件才是有效的。
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个