4


2

どのようにして、アニメーションGIFを.netのコンポーネント部分に分割しますか?

具体的には、メモリ内のImage(System.Drawing.Image)にそれらをロードしたいです。

====================== SLaksの答えに基づいて、私は今これを持っています

public static IEnumerable GetImages(Stream stream){using(var gifImage = Image.FromStream(stream)){var dimension = new FrameDimension(gifImage.FrameDimensionsList [0]); // GUIDを取得します。var frameCount = gifImage.GetFrameCount(dimension); //(var index = 0; index <frameCount; index){gifImage.SelectActiveFrame(dimension、index); //アニメーションの総フレーム数。 //フレームイールドリターンを見つける(ビットマップ)gifImage.Clone(); //そのコピーを返します}}}

4 Answer


3


アニメーションGIFを保持する Image`インスタンスのアクティブフレームを選択するにはhttp://msdn.microsoft.com/en-us/library/system.drawing.image.selectactiveframe.aspx [ SelectActiveFrame`]メソッドを使用してください。 例えば:

image.SelectActiveFrame(FrameDimension.Time, frameIndex);

フレーム数を取得するには、 `GetFrameCount(FrameDimension.Time)`を呼び出します。

アニメーションを再生したいだけの場合は、それをPictureBoxに入れるか、またはhttp://msdn.microsoft.com/en-us/library/system.drawing.imageanimator.aspx [ImageAnimator]クラスを使用することができます。


2


// Parses individual Bitmap frames from a multi-frame Bitmap into an array of Bitmaps

private Bitmap [] ParseFrames(Bitmap Animation){// Bitmap配列にコピーするアニメーションフレームの数を取得する

int Length = Animation.GetFrameCount(FrameDimension.Time);

//アニメーションからの個々のフレームを保持するためにビットマップ配列を割り当てます

Bitmap [] Frames = new Bitmap [Length];

//アニメーションビットマップフレームをビットマップ配列にコピーします

for(int Index = 0; Index <Length; Index){//アニメーション内の現在のフレームをBitmap配列要素にコピーするように設定する

Animation.SelectActiveFrame(FrameDimension.Time、Index);

//次のフレームをコピーするためのBitmap配列内に新しいBitmap要素を作成します

フレーム[インデックス] =新しいビットマップ(Animation.Size.Width、Animation.Size.Height);

//現在のアニメーションフレームを新しいBitmap配列要素にコピーする

Graphics.FromImage(Frames [Index])。DrawImage(Animation、new Point(0、0)); }

//ビットマップフレームの配列を返します

フレームを返します。 }


0


半関連、WPFには画像のすべてのフレームを提供するBitmapDecodersがあります。

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapdecoder.create.aspx[BitmapDecoder.Create]およびhttp://msdn.microsoft.com/en-us/を参照してください。 library / system.windows.media.imaging.bitmapdecoder.frames.aspx [BitmapDecoder.Frames]


0


Image img = Image.FromFile(@ "D:\ images \ zebra.gif");
//retrieving 1st frame
img.SelectActiveFrame(new FrameDimension(img.FrameDimensionsList [0])、1); pictureBox1.Image = new Bitmap(img);