示例#1
4
        private Task <Bitmap> GetBitmapAsync(string filePath, int size)
        {
            var resizedFilePath = GetResizedPath(filePath, size);

            // return cached version
            if (_cache.TryGetValue(resizedFilePath, out var item))
            {
                var bitmap = (Bitmap)item;
                return(Task.FromResult(bitmap));
            }

            // return resized version from disk
            if (File.Exists(resizedFilePath))
            {
                lock (_locker)
                {
                    if (File.Exists(resizedFilePath))
                    {
                        var bitmap = new Bitmap(resizedFilePath);
                        _cache.Set(resizedFilePath, bitmap, new MemoryCacheEntryOptions
                        {
                            Size = 1
                        });
                        return(Task.FromResult(bitmap));
                    }
                }
            }

            // resize and return image
            if (File.Exists(filePath))
            {
                return(Task.Run(() =>
                {
                    lock (_locker)
                    {
                        if (File.Exists(filePath) && !File.Exists(resizedFilePath))
                        {
                            if (_platform is WindowsPlatform)
                            {
                                ResizeWithSystemDrawing(filePath, resizedFilePath, size);
                            }
                            else
                            {
                                ResizeWithImageSharp(filePath, resizedFilePath, size);
                            }
                        }

                        if (File.Exists(resizedFilePath))
                        {
                            var bitmap = new Bitmap(resizedFilePath);
                            _cache.Set(resizedFilePath, bitmap, new MemoryCacheEntryOptions
                            {
                                Size = 1
                            });
                            return bitmap;
                        }

                        return null;
                    }
                }));
            }

            return(Task.FromResult <Bitmap>(null));
        }
示例#2
0
        private IObservable <IBitmap> LoadBitmap(TdApi.File file, long id, AvatarSize size)
        {
            var filename = GetFilename(file, id, size);

            if (file != null)
            {
                return(_fileLoader.LoadFile(file, LoadPriority.Max)
                       .FirstAsync(f => f.Local != null && f.Local.IsDownloadingCompleted)
                       .SelectMany(f => PrepareAvatar(f.Local.Path, (int)size, filename).ToObservable())
                       .SelectMany(path => CreateBitmap(path).ToObservable())
                       .Do(bitmap =>
                {
                    _cache.Set(filename, bitmap, new MemoryCacheEntryOptions
                    {
                        Size = 1
                    });
                }));
            }

            return(Observable.Return <Bitmap>(null));
        }
示例#3
0
        private Bitmap GetBitmap(string filePath)
        {
            lock (_locker)
            {
                Bitmap bitmap = null;

                if (_cache.TryGetValue(filePath, out var item))
                {
                    bitmap = (Bitmap)item;
                }
                else if (File.Exists(filePath))
                {
                    bitmap = new Bitmap(filePath);
                    _cache.Set(filePath, bitmap, new MemoryCacheEntryOptions
                    {
                        Size = 1
                    });
                }

                return(bitmap);
            }
        }