static IntPtr GetIcon(int iImage, SHIL_IconSizes size) { IImageList spiml = null; var guil = new Guid(IID_IImageList2);//or IID_IImageList NativeMethods.SHGetImageList((int)size, ref guil, ref spiml); var hIcon = IntPtr.Zero; spiml.GetIcon(iImage, NativeMethods.ILD_TRANSPARENT | NativeMethods.ILD_IMAGE, ref hIcon); return(hIcon); }
public static Image GetPngFromExtension(string ext, SHIL_IconSizes size) { ext = ext.Replace("*", "").Replace(".", ""); var hIcon = GetIcon(GetIconIndex("*." + ext), size); Image result = null; // from native to managed using (var ico = (Icon)Icon.FromHandle(hIcon).Clone()) { // save to stream to convert to png, then back. using (var stream = new MemoryStream()) { ico.ToBitmap().Save(stream, ImageFormat.Png); result = Image.FromStream(stream); } } NativeMethods.DestroyIcon(hIcon); // don't forget to cleanup return(result); }