public sealed override void Close() { lock (this.cache) if (this.cache.NotNull()) { this.cache.Apply(frame => frame.Item1.Dispose()); this.cache = null; } }
public sealed override void Open(Uri.Locator argument) { this.cache = new Collection.Vector <Tuple <Raster.Image, Tuple <string, object>[]> >(this.Prepare(argument)); new Action <int>(frame => { Tuple <Raster.Image, Tuple <string, object>[]> result = this.Generate(frame); Raster.Image generated = result.Item1; { switch (this.Format) { default: case Colorspace.Bgra: result = Tuple.Create <Raster.Image, Tuple <string, object>[]>(generated.Convert <Raster.Bgra>(), result.Item2); break; case Colorspace.Bgr: result = Tuple.Create <Raster.Image, Tuple <string, object>[]>(generated.Convert <Raster.Bgr>(), result.Item2); break; case Colorspace.Yuv420: result = Tuple.Create <Raster.Image, Tuple <string, object>[]>(generated.Convert <Raster.Yuv420>(), result.Item2); break; case Colorspace.Yvu420: result = Tuple.Create <Raster.Image, Tuple <string, object>[]>(generated.Convert <Raster.Yvu420>(), result.Item2); break; case Colorspace.Yuyv: result = Tuple.Create <Raster.Image, Tuple <string, object>[]>(generated.Convert <Raster.Yuyv>(), result.Item2); break; case Colorspace.Monochrome: result = Tuple.Create <Raster.Image, Tuple <string, object>[]>(generated.Convert <Raster.Monochrome>(), result.Item2); break; } } lock (this.cache) this.cache[frame] = result; }).For(this.Count); }