public ImageSource CreateImageSource(LibraryHierarchyNode libraryHierarchyNode, int width, int height, bool cache) { try { var id = this.GetImageId(libraryHierarchyNode, width, height); if (cache) { var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(this.ImageLoader.Load(fileName, 0, 0, true)); } } using (KeyLock.Lock(id)) { if (cache) { var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(this.ImageLoader.Load(fileName, 0, 0, true)); } } return(this.CreateImageSourceCore(libraryHierarchyNode, width, height, cache)); } } catch (Exception e) { Logger.Write(this, LogLevel.Error, "Error creating image source: {0}", e.Message); return(null); } }
private async Task <string> ImportImage(string fileName, string id, bool overwrite) { if (FileMetaDataStore.Contains(fileName)) { return(fileName); } var prefix = this.GetType().Name; var result = default(string); if (overwrite || !FileMetaDataStore.Exists(prefix, id, out result)) { #if NET40 Semaphore.Wait(); #else await Semaphore.WaitAsync().ConfigureAwait(false); #endif try { if (overwrite || !FileMetaDataStore.Exists(prefix, id, out result)) { return(await FileMetaDataStore.WriteAsync(prefix, id, fileName).ConfigureAwait(false)); } } finally { Semaphore.Release(); } } return(result); }
protected virtual string Resize(string id, Func <Image> factory, int width, int height) { var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(fileName); } //TODO: Setting throwOnTimeout = false so we ignore synchronization timeout. //TODO: I think there exists a deadlock bug in KeyLock but I haven't been able to prove it. using (KeyLock.Lock(id, TIMEOUT, false)) { if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(fileName); } using (var image = new Bitmap(width, height)) { using (var graphics = Graphics.FromImage(image)) { graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; this.Resize(graphics, factory, width, height); } using (var stream = new MemoryStream()) { image.Save(stream, ImageFormat.Png); stream.Seek(0, SeekOrigin.Begin); return(FileMetaDataStore.Write(PREFIX, id, stream)); } } } }
protected virtual string Resize(string id, Func <Image> factory, int width, int height) { var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(fileName); } using (KeyLock.Lock(id)) { if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(fileName); } using (var image = new Bitmap(width, height)) { using (var graphics = Graphics.FromImage(image)) { graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; this.Resize(graphics, factory, width, height); } using (var stream = new MemoryStream()) { image.Save(stream, ImageFormat.Png); stream.Seek(0, SeekOrigin.Begin); return(FileMetaDataStore.Write(PREFIX, id, stream)); } } } }
public ImageSource CreateImageSource(LibraryHierarchyNode libraryHierarchyNode, int width, int height) { var id = this.GetImageId(libraryHierarchyNode, width, height); var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(this.ImageLoader.Load(id, fileName, 0, 0, true)); } //TODO: Setting throwOnTimeout = false so we ignore synchronization timeout. //TODO: I think there exists a deadlock bug in KeyLock but I haven't been able to prove it. using (KeyLock.Lock(id, TIMEOUT, false)) { if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return(this.ImageLoader.Load(id, fileName, 0, 0, true)); } return(this.CreateImageSourceCore(libraryHierarchyNode, width, height)); } }
public WaveFormGenerator.WaveFormGeneratorData GetOrCreate(IOutputStream stream, int resolution, Func <WaveFormGenerator.WaveFormGeneratorData> factory) { var key = new Key(stream.FileName, stream.Length, resolution); return(this.Store.GetOrAdd(key, () => { if (this.Enabled.Value) { var id = this.GetDataId(stream, resolution); var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { var data = default(WaveFormGenerator.WaveFormGeneratorData); if (this.TryLoad(fileName, out data)) { return data; } } } return factory(); })); }
public ImageSource CreateImageSource(LibraryHierarchyNode libraryHierarchyNode, int width, int height, bool cache) { var id = this.GetImageId(libraryHierarchyNode, width, height); if (cache) { var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return this.ImageLoader.Load(fileName, 0, 0, true); } } using (KeyLock.Lock(id)) { if (cache) { var fileName = default(string); if (FileMetaDataStore.Exists(PREFIX, id, out fileName)) { return this.ImageLoader.Load(fileName, 0, 0, true); } } return this.CreateImageSourceCore(libraryHierarchyNode, width, height, cache); } }