Пример #1
0
        public ImageSource GetIconImage(string fastKey, string key, IconSize size, bool delayLoading)
        {
            string extKey = KeyToExtKey(key, size);

            if (!iconDic.ContainsKey(extKey))
            {
                if (delayLoading)
                {
                    WriteableBitmap bitmap = new WriteableBitmap(loadBitmap(KeyToBitmap(fastKey, size)));
                    thumbnailInfo   info   = new thumbnailInfo(bitmap, key, size, currentRoll);
                    if (size == IconSize.thumbnail)
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollThumbnailCallback), info);
                    }
                    else
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollIconCallback), info);
                    }

                    iconDic.Add(extKey, bitmap);
                }
                else
                {
                    iconDic.Add(extKey, loadBitmap(KeyToBitmap(key, size)));
                }
            }
            return(iconDic[extKey]);
        }
        private void PollIconCallback(object state)
        {
            thumbnailInfo   input       = state as thumbnailInfo;
            string          fileName    = input.fullPath;
            WriteableBitmap writeBitmap = input.bitmap;
            IconSize        size        = input.iconsize;

            Bitmap origBitmap  = GetFileIcon(fileName, size).ToBitmap();
            Bitmap inputBitmap = origBitmap;

            if (size == IconSize.jumbo || size == IconSize.thumbnail)
            {
                inputBitmap = resizeJumbo(origBitmap, getDefaultSize(size), 5);
            }
            else
            {
                inputBitmap = resizeImage(origBitmap, getDefaultSize(size), 0);
            }

            BitmapSource inputBitmapSource = loadBitmap(inputBitmap);

            origBitmap.Dispose();
            inputBitmap.Dispose();

            copyBitmap(inputBitmapSource, writeBitmap, true);
        }
        //Thumbnail (for images)
        private void PollThumbnailCallback(object state)
        {
            //Non UIThread
            thumbnailInfo input = state as thumbnailInfo;

            WriteableBitmap writeBitmap = input.bitmap;
            IconSize        size        = input.iconsize;

            try
            {
                Bitmap       origBitmap        = new Bitmap(input.key);
                Bitmap       inputBitmap       = resizeImage(origBitmap, IconSizeToSize(size), 5);
                BitmapSource inputBitmapSource = loadBitmap(inputBitmap);
                origBitmap.Dispose();
                inputBitmap.Dispose();
                inputBitmapSource.Freeze();

                //Update back to source.
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
                                                         new EventHandler(delegate
                {
                    iconDic[input.key] = inputBitmapSource;
                }));

                copyBitmap(inputBitmapSource, writeBitmap, true, 0, false);
            }
            catch (Exception ex) { Debug.WriteLine("PollThumbnailCallback " + ex.Message + "(" + input.key + ")"); }
        }
        //Icon (e.g. exe)
        private void PollIconCallback(object state)
        {
            thumbnailInfo input = state as thumbnailInfo;

            WriteableBitmap writeBitmap = input.bitmap;
            IconSize        size        = input.iconsize;

            Bitmap origBitmap  = KeyToBitmap(input.key, size);
            Bitmap inputBitmap = origBitmap;

            System.Drawing.Size outputSize = input.outputSize;
            if (size == IconSize.jumbo || size == IconSize.thumbnail)
            {
                inputBitmap = resizeJumbo(origBitmap, outputSize, 5);
            }
            else
            {
                inputBitmap = resizeImage(origBitmap, outputSize, 0);
            }

            BitmapSource inputBitmapSource = loadBitmap(inputBitmap);

            origBitmap.Dispose();
            inputBitmap.Dispose();

            //Update back to source.
            Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
                                                     new EventHandler(delegate
            {
                iconDic[input.key] = inputBitmapSource;
            }));

            copyBitmap(inputBitmapSource, writeBitmap, true, 0, false);
        }
        public ImageSource GetIconImage(string fastKey, string key, IconSize size, bool delayLoading)
        {
            string extKey = KeyToExtKey(key, size);

            if (!iconDic.ContainsKey(extKey))
            {
                if (delayLoading)
                {
                    WriteableBitmap bitmap = new WriteableBitmap(
                        iconDic.ContainsKey(fastKey) ? iconDic[fastKey] : loadBitmap(KeyToBitmap(fastKey, size)));
                    thumbnailInfo info = new thumbnailInfo(bitmap, key, size, new System.Drawing.Size(bitmap.PixelWidth, bitmap.PixelHeight), currentRoll);
                    string        ext  = Path.GetExtension(key);
                    if (size == IconSize.thumbnail && !String.IsNullOrEmpty(ext) &&
                        imageFilter.IndexOf(ext, StringComparison.InvariantCultureIgnoreCase) != -1)
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollThumbnailCallback), info);
                    }
                    else
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollIconCallback), info);
                    }

                    iconDic.Add(extKey, bitmap);
                }
                else
                {
                    iconDic.Add(extKey, loadBitmap(KeyToBitmap(key, size)));
                }
            }
            return(iconDic[extKey]);
        }
Пример #6
0
        public ImageSource GetIconImage(string fastKey, string key, IconSize size, bool delayLoading)
        {
            string extKey     = KeyToExtKey(key, size);
            string ext        = Path.GetExtension(key);
            string fastExtKey = KeyToExtKey(fastKey, size);

            bool isImage = !String.IsNullOrEmpty(ext) &&
                           imageFilter.IndexOf(ext, StringComparison.InvariantCultureIgnoreCase) != -1;

            delayLoading = delayLoading && ((isImage && (int)size >= (int)IconSize.extraLarge) || !isImage);

            //0.4
            //Fixed Small Image Icon not shared by all instance
            if (isImage && size == IconSize.small)
            {
                extKey = ext.ToLower();
            }

            if (!iconDic.ContainsKey(extKey))
            {
                if (delayLoading)
                {
                    WriteableBitmap bitmap = new WriteableBitmap(
                        iconDic.ContainsKey(fastExtKey) ? iconDic[fastExtKey] : loadBitmap(KeyToBitmap(fastKey, size)));
                    thumbnailInfo info = new thumbnailInfo(bitmap, key, size, new System.Drawing.Size(bitmap.PixelWidth, bitmap.PixelHeight), currentRoll);

                    if (isImage)
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollThumbnailCallback), info);
                    }
                    else
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollIconCallback), info);
                    }

                    iconDic.Add(extKey, bitmap);
                }
                else
                {
                    iconDic.Add(extKey, loadBitmap(KeyToBitmap(isImage ? fastKey : key, size)));
                }
            }

            return(iconDic[extKey]);
        }
Пример #7
0
        //Icon (e.g. exe)
        private void PollIconCallback(object state)
        {
            thumbnailInfo input = state as thumbnailInfo;

            IFileSystemInfoExA entry = input.entry;

            if (input.roll != currentRoll)
            {
                Debug.Write(entry.Name + " discarded."); return;
            }
            getPathLock.TryEnterWriteLock(-1);
            string fileName = "";

            try { fileName = entry.FullName; }
            finally { getPathLock.ExitWriteLock(); }

            WriteableBitmap writeBitmap = input.bitmap;
            IconSize        size        = input.iconsize;

            if (input.roll != currentRoll)
            {
                Debug.Write(entry.Name + " discarded."); return;
            }
            Bitmap origBitmap  = KeyToBitmap(fileName, size);
            Bitmap inputBitmap = origBitmap;

            if (size == IconSize.jumbo || size == IconSize.thumbnail)
            {
                inputBitmap = resizeJumbo(origBitmap, IconSizeToSize(size), 5);
            }
            else
            {
                inputBitmap = resizeImage(origBitmap, IconSizeToSize(size), 0);
            }

            BitmapSource inputBitmapSource = loadBitmap(inputBitmap);

            origBitmap.Dispose();
            inputBitmap.Dispose();

            copyBitmap(inputBitmapSource, writeBitmap, true, 0);
        }
        private void PollThumbnailCallback(object state)
        {
            //Non UIThread
            thumbnailInfo   input       = state as thumbnailInfo;
            string          fileName    = input.fullPath;
            WriteableBitmap writeBitmap = input.bitmap;
            IconSize        size        = input.iconsize;

            try
            {
                Bitmap       origBitmap        = new Bitmap(fileName);
                Bitmap       inputBitmap       = resizeImage(origBitmap, getDefaultSize(size), 5);
                BitmapSource inputBitmapSource = loadBitmap(inputBitmap);
                origBitmap.Dispose();
                inputBitmap.Dispose();

                copyBitmap(inputBitmapSource, writeBitmap, true);
            }
            catch { }
        }
Пример #9
0
        //Thumbnail (for images)
        private void PollThumbnailCallback(object state)
        {
            //Non UIThread
            thumbnailInfo      input = state as thumbnailInfo;
            IFileSystemInfoExA entry = input.entry;

            if (input.roll != currentRoll)
            {
                Debug.Write(entry.Name + " discarded."); return;
            }

            getPathLock.TryEnterWriteLock(-1);
            string fileName = "";

            try { fileName = entry.FullName; }
            finally { getPathLock.ExitWriteLock(); }

            WriteableBitmap writeBitmap = input.bitmap;
            IconSize        size        = input.iconsize;

            try
            {
                if (input.roll != currentRoll)
                {
                    Debug.Write(entry.Name + " discarded."); return;
                }
                Bitmap       origBitmap        = new Bitmap(fileName);
                Bitmap       inputBitmap       = resizeImage(origBitmap, IconSizeToSize(size), 5);
                BitmapSource inputBitmapSource = loadBitmap(inputBitmap);
                origBitmap.Dispose();
                inputBitmap.Dispose();

                copyBitmap(inputBitmapSource, writeBitmap, true, 0);
            }
            catch (Exception ex) { Debug.WriteLine("PollThumbnailCallback " + ex.Message + "(" + fileName + ")"); }
        }
        public ImageSource GetIconImage(string fastKey, string key, IconSize size, bool delayLoading)
        {
            string extKey = KeyToExtKey(key, size);
            string ext = Path.GetExtension(key);
            string fastExtKey = KeyToExtKey(fastKey, size);

            bool isImage = !String.IsNullOrEmpty(ext) &&
                imageFilter.IndexOf(ext, StringComparison.InvariantCultureIgnoreCase) != -1;
            delayLoading = delayLoading && ((isImage && (int)size >= (int)IconSize.extraLarge) || !isImage);

            //!!! +AK Поставлено принудительно, т.к. иначе при первом запуске возвращает одинаковую иконку(папку) для всех файлов
            //Видимо, значение в iconDic не успевает подмениться
            delayLoading = false;//
            //0.4
            //Fixed Small Image Icon not shared by all instance
            if (isImage && size == IconSize.small)
                extKey = ext.ToLower();

            if (!iconDic.ContainsKey(extKey))
            {
                if (delayLoading)
                {
                    WriteableBitmap bitmap = new WriteableBitmap(
                        iconDic.ContainsKey(fastExtKey) ? iconDic[fastExtKey] : loadBitmap(KeyToBitmap(fastKey, size)));
                    thumbnailInfo info = new thumbnailInfo(bitmap, key, size, new System.Drawing.Size(bitmap.PixelWidth, bitmap.PixelHeight), currentRoll);

                    if (isImage)
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollThumbnailCallback), info);
                    else
                    ////Не работает PollIconCallback(info);
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollIconCallback), info);
                        _ev.WaitOne();
                    }
                    iconDic.Add(extKey, bitmap);
                }
                else
                    iconDic.Add(extKey, loadBitmap(KeyToBitmap(isImage ? fastKey : key, size)));
            }

            return iconDic[extKey];
        }
        public ImageSource GetIconImage(string fastKey, string key, IconSize size, bool delayLoading)
        {
            string extKey = KeyToExtKey(key, size);
            if (!iconDic.ContainsKey(extKey))
                if (delayLoading)
                {
                    WriteableBitmap bitmap = new WriteableBitmap(loadBitmap(KeyToBitmap(fastKey, size)));
                    thumbnailInfo info = new thumbnailInfo(bitmap, key, size, currentRoll);
                    if (size == IconSize.thumbnail)
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollThumbnailCallback), info);
                    else ThreadPool.QueueUserWorkItem(new WaitCallback(PollIconCallback), info);

                    iconDic.Add(extKey, bitmap);
                }
                else
                    iconDic.Add(extKey, loadBitmap(KeyToBitmap(key, size)));
            return iconDic[extKey];
        }
Пример #12
0
        public ImageSource GetIconImage(string fastKey, string key, IconSize size, bool delayLoading)
        {
            string extKey = KeyToExtKey(key, size);
            string ext = Path.GetExtension(key);
            string fastExtKey = KeyToExtKey(fastKey, size);

            bool isImage = !String.IsNullOrEmpty(ext) &&
                imageFilter.IndexOf(ext, StringComparison.InvariantCultureIgnoreCase) != -1;
            delayLoading = delayLoading && ((isImage && (int)size >= (int)IconSize.extraLarge) || !isImage);

            //0.4
            //Fixed Small Image Icon not shared by all instance
            if (isImage && size == IconSize.small)
                extKey = ext.ToLower();

            if (!iconDic.ContainsKey(extKey))
            {
                if (delayLoading)
                {
                    WriteableBitmap bitmap = new WriteableBitmap(
                        iconDic.ContainsKey(fastExtKey) ? iconDic[fastExtKey] : loadBitmap(KeyToBitmap(fastKey, size)));
                    thumbnailInfo info = new thumbnailInfo(bitmap, key, size, new System.Drawing.Size(bitmap.PixelWidth, bitmap.PixelHeight), currentRoll);

                    if (isImage)
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollThumbnailCallback), info);
                    else
                        ThreadPool.QueueUserWorkItem(new WaitCallback(PollIconCallback), info);

                    iconDic.Add(extKey, bitmap);
                }
                else
                    iconDic.Add(extKey, loadBitmap(KeyToBitmap(isImage ? fastKey : key, size)));
            }

            return iconDic[extKey];
        }