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]); }
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]); }
//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 { } }
//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]; }
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]; }