Laden...

GIF Animation bestmöglichst aus einem Bytearray laden?

Erstellt von BlackMatrix vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.186 Views
B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 8 Jahren
GIF Animation bestmöglichst aus einem Bytearray laden?

Hallo,

ich habe ein Bytearray, welches eine GIF Animation repräsentiert und möchte gerne alle einzelnen Frames in einzelne Bitmaps laden. Nun, trotz geschlossenem Stream scheint das Bitmap keine Bearbeitung zu vertragen und wohl auch ein heiß diskutiertes Thema im Netz. Aber wie lade ich nun denn am besten so ein Bitmap um anschließend auch noch ungestört meine "Bearbeitungen" durchzuführen? In Anführungszeichen deshalb, weil ich eigentlich nur die aktiven Frames selektiere und ich dahinter eigentlich keine Bearbeitung vermute.

Hier mein Code, der einen GDI+ Fehler wirft:


		private static void Main(string[] args)
		{
			var frames = GetFramesAsync("http://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_(large).gif").Result;
		}

		private static async Task<IEnumerable<Bitmap>> GetFramesAsync(string gifSource)
		{
			var client = new HttpClient();
			var bytes = await client.GetByteArrayAsync(gifSource);

			Image image;
			using (var ms = new MemoryStream(bytes, false))
			{
				image = Image.FromStream(ms);
			}

			var numberOfFrames = image.GetFrameCount(FrameDimension.Time);

			return Enumerable.Range(0, numberOfFrames).Select(i =>
			{
				image.SelectActiveFrame(FrameDimension.Time, i);
				return (Bitmap) image.Clone();
			}).ToArray();
		}

Viele Grüße

BlackMatrix

3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

Nun, trotz geschlossenem Stream scheint das Bitmap keine Bearbeitung zu vertragen

Nicht trotz, sondern wegen - Du musst den zugrundeliegenden MemoryStream offen lassen, während Du die Frames ausliest.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca