LEADTOOLS(Leadtoolsアセンブリ)

フレームを表示

RasterImageAnimatorクラス








メンバ 
時系列フレームを持っているimageをアニメーション化します。
オブジェクトモデル
構文
public class RasterImageAnimator : System.IDisposable  
'Declaration
 
Public Class RasterImageAnimator 
   Implements System.IDisposable 
'Usage
 
Dim instance As RasterImageAnimator
function Leadtools.RasterImageAnimator()
public ref class RasterImageAnimator : public System.IDisposable  
解説

アニメーションファイルをロードして再生するために、GIFなどの、ファイルからフレームをRasterImageオブジェクトへロードすることができて、そしてターゲットimageで各々の変更を示すループで、ターゲットimageにリストを再生します。ゼロからアニメーションシーケンスを作成することもできて、アニメーションGIFファイルを作成するために、イメージを保存することもできます。

以下は、可能性がある手順の輪郭線です:

  1. ロードを用いてマルチフレームimageをロードします
  2. マルチフレームimageのイメージのサイズであるターゲットimageを作成するために、RasterImageコンストラクタを使用します
  3. 参照がimageとターゲットimageをマルチフレーム化するアニメーション再生を作成するために、RasterImageAnimatorクラスを使用します
  4. マルチフレームimageで各々のフレームを処理するループに、以下をします:
    1. 使用RasterImageAnimator.Processは現在の状態を処理することになっていて、アニメーションの次の状態を取得することになっています
    2. 使用RasterImageAnimator.GetUpdateRectangleは、最新版長方形(変更したターゲットimageの部分)を取得することになっています
    3. imageの変更された部分を描画するために、RasterImagePainter.Paintを使います。変更された部分だけを描画するために、ソースクリッピング長方形として最新版長方形を使います。

アニメーションループは多数の状態を持っていることができます、そして、変化を適切な状態に塗らなければならないだけです(たとえば、次の状態が可能性がある状態のリストのためのRasterImageAnimatorState.PostRender.であるとき、RasterImageAnimatorStateを参照します。

次の状態がRasterImageAnimatorState.PostDisposeであるとき、ターゲットRasterImageRasterImage.AnimationDisposalMethodプロパティは何がレンダリングの後、そして、任意の待ち状態の後再生ループでimageに起こるか決定します。オプションは以下の通りです:実際にはimageを保持するか、背景を回復させるか、1つ前のimageを回復させます。(背景を回復させることはアニメーションのための一般のオプションです。)

アニメーションループは、フレームのリスト中を、連続的に行きます。リストの終わりに止まりたいならば、次の状態がRasterImageAnimatorState.Endであるとき、ループを出ることができます。

RasterImageAnimatorクラスはIDisposableなインターフェースも実装します、RasterImageAnimatorクラスを使用するとき、標準的な.NETがパターンを破棄することになるよう勧めます。詳細については、「IDisposable」を参照してください。

サンプル

このサンプルはアニメーションGIFファイルをロードして、任意のパネルの表面で描画します。

Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.Drawing

Sub RasterImageAnimatorExample(ByVal panel As Panel)
   ' Initialize the RasterCodecs object
   Dim codecs As New RasterCodecs()
   ' Load the animated GIF file
   Dim fileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Eye.gif")
   Dim animatedImage As RasterImage = codecs.Load(fileName)

   ' Create the target image, we want it to be in the animated image size
   Dim targetImage As New RasterImage( _
      RasterMemoryFlags.Conventional, _
      animatedImage.AnimationGlobalSize.Width, _
      animatedImage.AnimationGlobalSize.Height, _
      animatedImage.BitsPerPixel, _
      animatedImage.Order, _
      animatedImage.ViewPerspective, _
      Nothing, _
      IntPtr.Zero, _
      0)

   ' Copy the palette from the animated image to this newly created image
   animatedImage.CopyPaletteTo(targetImage)

   ' Create the RasterImageAnimator object
   Dim animator As New RasterImageAnimator(targetImage, animatedImage)

   ' Animate it

   ' Use GDI+ paint engine to support transparent colors
   Dim props As RasterPaintProperties = RasterPaintProperties.Default
   props.PaintEngine = RasterPaintEngine.GdiPlus

   Dim g As Graphics = panel.CreateGraphics()

   Dim state As RasterImageAnimatorState
   Do
      Dim srcRect As New LeadRect(0, 0, targetImage.ImageWidth, targetImage.ImageHeight)
      Dim updateRect As LeadRect
      Dim destRect As LeadRect

      state = animator.Process()

      Select Case (state)
         Case RasterImageAnimatorState.WaitDelay, _
            RasterImageAnimatorState.WaitInputDelay, _
            RasterImageAnimatorState.Render
            ' Continue processing

         Case RasterImageAnimatorState.WaitInput
            ' In case the animated image has the "wait for user input" flags,
            ' cancel the waiting
            animator.CancelWait()

         Case RasterImageAnimatorState.PostClear, _
            RasterImageAnimatorState.PostRender
            ' Get the area in the target image that has changed
            updateRect = animator.GetUpdateRectangle(True)

            ' Paint it
            destRect = New LeadRect(0, 0, targetImage.ImageWidth, targetImage.ImageHeight)

            RasterImagePainter.Paint(targetImage, g, srcRect, updateRect, destRect, destRect, props)
      End Select
   Loop While (state <> RasterImageAnimatorState.End)

   g.Dispose()

   animator.Dispose()

   targetImage.Dispose()
   animatedImage.Dispose()

   codecs.Dispose()
End Sub

Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.Drawing;

      
      
public void RasterImageAnimatorExample(Panel panel)
{
   // Initialize the RasterCodecs object
   RasterCodecs codecs = new RasterCodecs();
   // Load the animated GIF file
   string fileName = Path.Combine(ImagesPath.Path, "Eye.gif");
   RasterImage animatedImage = codecs.Load(fileName);

   // Create the target image, we want it to be in the animated image size
   RasterImage targetImage = new RasterImage(
      RasterMemoryFlags.Conventional,
      animatedImage.AnimationGlobalSize.Width,
      animatedImage.AnimationGlobalSize.Height,
      animatedImage.BitsPerPixel,
      animatedImage.Order,
      animatedImage.ViewPerspective,
      null,
      IntPtr.Zero,
      0);

   // Copy the palette from the animated image to this newly created image
   animatedImage.CopyPaletteTo(targetImage);

   // Create the RasterImageAnimator object
   RasterImageAnimator animator = new RasterImageAnimator(targetImage, animatedImage);

   // Animate it

   // Use GDI+ paint engine to support transparent colors
   RasterPaintProperties props = RasterPaintProperties.Default;
   props.PaintEngine = RasterPaintEngine.GdiPlus;

   Graphics g = panel.CreateGraphics();

   RasterImageAnimatorState state;
   do
   {
      LeadRect srcRect = new LeadRect(0, 0, targetImage.ImageWidth, targetImage.ImageHeight);
      LeadRect updateRect;
      LeadRect destRect;

      state = animator.Process();

      switch(state)
      {
         case RasterImageAnimatorState.WaitDelay:
         case RasterImageAnimatorState.WaitInputDelay:
         case RasterImageAnimatorState.Render:
            // Continue processing
            break;

         case RasterImageAnimatorState.WaitInput:
            // In case the animated image has the "wait for user input" flags,
            // cancel the waiting
            animator.CancelWait();
            break;

         case RasterImageAnimatorState.PostClear:
         case RasterImageAnimatorState.PostRender:
            // Get the area in the target image that has changed
            updateRect = animator.GetUpdateRectangle(true);

            // Paint it
            destRect = new LeadRect(0, 0, targetImage.ImageWidth, targetImage.ImageHeight);

            RasterImagePainter.Paint(targetImage, g, srcRect, updateRect, destRect, destRect, props);
            break;

         default:
            break;
      }
   }
   while(state != RasterImageAnimatorState.End);

   g.Dispose();

   animator.Dispose();

   targetImage.Dispose();
   animatedImage.Dispose();

   codecs.Dispose();
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;

      
public async Task RasterImageAnimatorExample()
{
   // Initialize the RasterCodecs object
   RasterCodecs codecs = new RasterCodecs();
   // Load the animated GIF file
   string srcFileName = @"Assets\eye.gif";
   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName);
   RasterImage animatedImage = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile));

   // Create the target image, we want it to be in the animated image size
   RasterImage targetImage = new RasterImage(
      RasterMemoryFlags.Conventional,
      animatedImage.AnimationGlobalSize.Width,
      animatedImage.AnimationGlobalSize.Height,
      animatedImage.BitsPerPixel,
      animatedImage.Order,
      animatedImage.ViewPerspective,
      null);

   // Copy the palette from the animated image to this newly created image
   animatedImage.CopyPaletteTo(targetImage);

   // Create the RasterImageAnimator object
   RasterImageAnimator animator = new RasterImageAnimator(targetImage, animatedImage);

   // Animate it

   RasterImageAnimatorState state;
   do
   {
      LeadRect srcRect = LeadRectHelper.Create(0, 0, targetImage.ImageWidth, targetImage.ImageHeight);
      LeadRect updateRect;
      LeadRect destRect;

      state = animator.Process();

      switch (state)
      {
         case RasterImageAnimatorState.WaitDelay:
         case RasterImageAnimatorState.WaitInputDelay:
         case RasterImageAnimatorState.Render:
            // Continue processing
            break;

         case RasterImageAnimatorState.WaitInput:
            // In case the animated image has the "wait for user input" flags,
            // cancel the waiting
            animator.CancelWait();
            break;

         case RasterImageAnimatorState.PostClear:
         case RasterImageAnimatorState.PostRender:
            // Get the area in the target image that has changed
            updateRect = animator.GetUpdateRectangle(true);

            // Paint it
            destRect = LeadRectHelper.Create(0, 0, targetImage.ImageWidth, targetImage.ImageHeight);

            // Render the image here, for example, set the frame to a viewer control
            // rasterImageViewer.Image = targetImage;
            break;

         default:
            break;
      }
   }
   while (state != RasterImageAnimatorState.End);

   animator.Dispose();

   targetImage.Dispose();
   animatedImage.Dispose();

   codecs.Dispose();
}
必要条件

ターゲットプラットホーム

参照

参照

RasterImageAnimatorメンバ
Leadtools名前空間