zoukankan      html  css  js  c++  java
  • 再学 GDI+[103]: TGPImage(23) 提取 GIF 动画的每一帧

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        OpenDialog1: TOpenDialog;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure ListBox1Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses GDIPOBJ, GDIPAPI;
    
    var
      img: TGPImage;
      GifFrame, GifFrameCount: Word;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      OpenDialog1.Filter := 'GIF 文件|*.gif';
      img := TGPImage.Create;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      img.Free;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      DimensionsCount: Integer;
      DimensionsIDs: PGUID;
      i: Integer;
    type
      ArrDimensions = array of TGUID;
    begin
      if not OpenDialog1.Execute then Exit;
      img.Free;
      img := TGPImage.Create(OpenDialog1.FileName);
    
      {获取 Gif 总帧数}
      DimensionsCount := img.GetFrameDimensionsCount;
      GetMem(DimensionsIDs, DimensionsCount * SizeOf(TGUID));
      img.GetFrameDimensionsList(DimensionsIDs, DimensionsCount);
      GifFrameCount := img.GetFrameCount(ArrDimensions(DimensionsIDs)[0]);
      FreeMem(DimensionsIDs);
    
      Text := Format('共有 %d 帧', [GifFrameCount]);
    
      {显示帧列表}
      ListBox1.Clear;
      for i := 1 to GifFrameCount do
        ListBox1.Items.Add(Format('第 %d 帧', [i]));
    
      Repaint;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      g: TGPGraphics;
    begin
      g := TGPGraphics.Create(Canvas.Handle);
      g.DrawImage(img, ListBox1.Width + 10, 10, img.GetWidth, img.GetHeight);
      g.Free;
    end;
    
    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
      GifFrame := ListBox1.ItemIndex;
      img.SelectActiveFrame(FrameDimensionTime, GifFrame);
      Repaint;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 206
      ClientWidth = 339
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      OnDestroy = FormDestroy
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object ListBox1: TListBox
        Left = 0
        Top = 0
        Width = 89
        Height = 206
        Align = alLeft
        ItemHeight = 13
        TabOrder = 0
        OnClick = ListBox1Click
      end
      object Button1: TButton
        Left = 256
        Top = 173
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 1
        OnClick = Button1Click
      end
      object OpenDialog1: TOpenDialog
        Left = 160
        Top = 104
      end
    end
    
  • 相关阅读:
    php命令注入
    mysql事物
    安装php环境
    移除服务器缓存实例
    show user profile synchronization tools
    manual start user profile import
    JSON is undefined. Infopath Form People Picker in SharePoint 2013
    asp.net web 应用站点支持域账户登录
    Load sharepoint envirement by powershell
    sharepoint 2016 download
  • 原文地址:https://www.cnblogs.com/del/p/1244232.html
Copyright © 2011-2022 走看看