public static ImageList GetImageList(object imageListAsPointer) { ImageList images = null; IntPtr intPtr = new IntPtr((int)imageListAsPointer); HandleRef hImageList = new HandleRef(null, intPtr); int count = UnsafeNativeMethods.ImageList_GetImageCount(hImageList); if (count > 0) { // Create a bitmap big enough to hold all the images Bitmap b = new Bitmap(16 * count, 16); Graphics g = Graphics.FromImage(b); // Loop through and extract each image from the imagelist into our own bitmap IntPtr hDC = IntPtr.Zero; try { hDC = g.GetHdc(); HandleRef handleRefDC = new HandleRef(null, hDC); for (int i = 0; i < count; i++) { UnsafeNativeMethods.ImageList_Draw(hImageList, i, handleRefDC, i * 16, 0, NativeMethods.ILD_NORMAL); } } finally { if (g != null && hDC != IntPtr.Zero) { g.ReleaseHdc(hDC); } } // Create a new imagelist based on our stolen images images = new ImageList(); images.ColorDepth = ColorDepth.Depth24Bit; images.ImageSize = new Size(16, 16); images.Images.AddStrip(b); } return(images); }