Icon Extraction
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Runtime.InteropServices; namespace AjGenesisStudio.Utils { class IconExtraction { public static int GetIcon(ImageList images, string extension) { return GetIcon(images, extension, false); } public static int GetIcon(ImageList images, string extension, bool largeIcon) { for (int i = 0; i < images.Images.Count; i++) if (images.Images.Keys[i] == extension) return i; images.Images.Add(extension, ExtractIconForExtension(extension, largeIcon)); return images.Images.Count - 1; } public static Icon ExtractIconForExtension(string extension, bool large) { if (extension != null) { //let's just make up a file name with that extension string fictitiousFile = "0" + extension; //now get the icon for that file return GetAssociatedIcon(fictitiousFile, large); } else { throw new ArgumentException("Invalid file or extension.", "fileOrExtension"); } } public static Icon GetAssociatedIcon(string stubPath, bool large) { SHFILEINFO info = new SHFILEINFO(true); int cbFileInfo = Marshal.SizeOf(info); SHGFI flags; if (large) flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes; else flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes; SHGetFileInfo(stubPath, 256, out info, (uint)cbFileInfo, flags); return (Icon)Icon.FromHandle(info.hIcon); } #region Win32 API imports [DllImport("shell32.dll", CharSet = CharSet.Auto)] private static extern int SHGetFileInfo( string pszPath, int dwFileAttributes, out SHFILEINFO psfi, uint cbfileInfo, SHGFI uFlags); private const int MAX_PATH = 260; private const int MAX_TYPE = 80; private struct SHFILEINFO { public SHFILEINFO(bool b) { hIcon = IntPtr.Zero; iIcon = 0; dwAttributes = 0; szDisplayName = ""; szTypeName = ""; } public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_TYPE)] public string szTypeName; }; [Flags] enum SHGFI : int { /// <summary>get icon</summary> Icon = 0x000000100, /// <summary>get display name</summary> DisplayName = 0x000000200, /// <summary>get type name</summary> TypeName = 0x000000400, /// <summary>get attributes</summary> Attributes = 0x000000800, /// <summary>get icon location</summary> IconLocation = 0x000001000, /// <summary>return exe type</summary> ExeType = 0x000002000, /// <summary>get system icon index</summary> SysIconIndex = 0x000004000, /// <summary>put a link overlay on icon</summary> LinkOverlay = 0x000008000, /// <summary>show icon in selected state</summary> Selected = 0x000010000, /// <summary>get only specified attributes</summary> Attr_Specified = 0x000020000, /// <summary>get large icon</summary> LargeIcon = 0x000000000, /// <summary>get small icon</summary> SmallIcon = 0x000000001, /// <summary>get open icon</summary> OpenIcon = 0x000000002, /// <summary>get shell size icon</summary> ShellIconize = 0x000000004, /// <summary>pszPath is a pidl</summary> PIDL = 0x000000008, /// <summary>use passed dwFileAttribute</summary> UseFileAttributes = 0x000000010, /// <summary>apply the appropriate overlays</summary> AddOverlays = 0x000000020, /// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary> OverlayIndex = 0x000000040, } #endregion } }
1. | Image Paint Simple Demo | ||
2. | Image Warper App | ||
3. | Draw image | ![]() | |
4. | Image Icon Form | ![]() | |
5. | Icon Image Draw | ![]() | |
6. | Image Class | ||
7. | MetaFile and Draw | ![]() | |
8. | Picture Controls | ![]() | |
9. | Control Palette | ||
10. | Cube Image | ![]() | |
11. | Image Zoom 1 | ![]() | |
12. | Image Flip | ![]() |