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
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