Click here to Skip to main content
15,860,972 members
Articles / Programming Languages / C#

Extract images from private ImageLists

Rate me:
Please Sign up or sign in to vote.
4.05/5 (10 votes)
17 Feb 2006CPOL 67K   1.1K   13   15
Shows how to extract images from an ImageList on a form.

Sample Image - extractimages.jpg

Introduction

Sometimes you want to extract an image from an existing .NET DLL which is not included as a default resource. For instance, you added an image to an ImageList and forgot where the image came from. You now wish to save this image, which is impossible using the IDE of Visual Studio. To do this, I wrote this small piece of code, which is not completely foolproof, but should work in most occasions.

How it's done

First, I open the DLL and scan it for objects of type Form (exception handling removed):

C#
Assembly ass = Assembly.LoadFrom(textBox1.Text);
Type[] types = ass.GetExportedTypes();
            
foreach(Type type in types)
{
    if (!type.IsAbstract && type .IsSubclassOf(typeof(Form)))
    {
        // create instance and extract images
        Form fm = (Form) ass.CreateInstance(type.FullName);
        extractImages(fm);
    }
}

Extracting the images is quite easy; just remember that there can be more than one ImageList. The same can be done to extract images from other types of controls. I convert the images to PNG to recreate the transparency.

C#
Type t = form.GetType();
FieldInfo field = t.GetField("components", 
   BindingFlags.NonPublic | BindingFlags.Instance );
IContainer comps = (IContainer)field.GetValue(form);
int imglist_idx=0;
foreach(Component c in comps.Components)
{
    if (c is ImageList)
    {
               // .. save individual images

.... and so on, hope you get the idea.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Netherlands Netherlands
I am a .NET developer from Gouda, the Netherlands, developing software since mid eighties.

Comments and Discussions

 
General.Net 4 and form not expecting to be called without prerequisites Pin
mbierman31-Aug-11 12:14
mbierman31-Aug-11 12:14 
Suggestionvery good Pin
ReniD21-Jul-11 23:29
ReniD21-Jul-11 23:29 
GeneralMy vote of 5 Pin
jswolf195-Jul-11 21:01
jswolf195-Jul-11 21:01 
GeneralMy vote of 5 Pin
Latif.Kankanwadi25-Mar-11 19:56
Latif.Kankanwadi25-Mar-11 19:56 
Generalnice Pin
Pranay Rana30-Dec-10 0:04
professionalPranay Rana30-Dec-10 0:04 
GeneralNice tool. Some suggestions. Pin
Drew Noakes12-Jun-08 23:34
Drew Noakes12-Jun-08 23:34 
GeneralI like!!!! Pin
Christopher Stratmann27-Nov-07 2:47
Christopher Stratmann27-Nov-07 2:47 
GeneralRe: I like!!!! Pin
Steve Hansen27-Nov-07 3:05
Steve Hansen27-Nov-07 3:05 
QuestionCan this work on an exe? Pin
ncarty9711-Apr-07 2:52
ncarty9711-Apr-07 2:52 
AnswerRe: Can this work on an exe? Pin
Guido_d25-Sep-07 3:00
Guido_d25-Sep-07 3:00 
GeneralRe: Can this work on an exe? Pin
Drew Noakes12-Jun-08 23:27
Drew Noakes12-Jun-08 23:27 
Generalcomments Pin
Paul Brower17-Feb-06 2:08
Paul Brower17-Feb-06 2:08 
GeneralRe: comments Pin
Guido_d17-Feb-06 2:36
Guido_d17-Feb-06 2:36 
GeneralRe: comments Pin
Paul Brower17-Feb-06 2:48
Paul Brower17-Feb-06 2:48 
You should put your error handling around:

Assembly ass = Assembly.LoadFrom(textBox1.Text);
GeneralRe: comments Pin
Guido_d17-Feb-06 3:02
Guido_d17-Feb-06 3:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.