[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gtkmm
Subject:    Re: Use a .png file
From:       Rob Benton <rob.benton () conwaycorp ! net>
Date:       2005-12-10 18:21:14
Message-ID: 439B1C9A.5030704 () conwaycorp ! net
[Download RAW message or body]

Bob Caryl wrote:
> It is a gnome application, so I suppose it is safe to assume that you
> must install it to use it.
> 
> The reason I use this method is because I was not too impressed by the
> quality of the xpm export from gimp, versus the quality of the
> conversion of .png files by gnome-pixbuf-csource.  I use this method for
> very small icons and all the way up to larger background images.  I have
> been quite satisified with the results.
> 
> Bob
> 
> R. Douglas Barbieri wrote:
> 
> 
> > On 12/7/05, Bob Caryl <bob@fis-cal.com> wrote:
> > 
> > 
> > 
> > > Your original question was:
> > > 
> > > "How can I include a .png or .bmp image in my source code?"
> > > 
> > > All the answers I have seen so far show you how to display an image from a file \
> > > at run time.  None of these show how to include the image in your source code. 
> > > The following code displays an image that is compiled as data into the \
> > > executable itself: 
> > > Glib::RefPtr<Gdk::Pixbuf> fis_icon = \
> > > Gdk::Pixbuf::create_from_inline(-1,fisicon_inline,FALSE); 
> > > fis_icon is a data structure that is produced by a gnome command line utility \
> > > called "gdk_pixbuf_csource."  You can use the "man" command to find out about \
> > > the calling syntax and output options for this utility.  Then you merely take \
> > > the file it produces and include it in your source code and the image data is \
> > > compiled into your application. 
> > > 
> > > 
> > 
> > Wow! That is a cool solution. For me, I open up the image in gimp,
> > save it out as an XPM, then include the image as source code: #include
> > "image.xpm". Then I do
> > 
> > Glib::RefPtr<Gdk::Pixbuf> image = Gdk::Pixbuf::create_from_xpm_data(
> > image_xpm );
> > 
> > So is the gdk_pixbuf_csource function more efficient than xpm
> > conversion? Also, is it only in gnome?
> > 

I've been thinking about methods similar to this myself.  I have a 
program that loads a lot of small .svg files.  What I've seen is 
actually including the image as an unsigned char array.  I used Glade to 
create just a single window with a Gtk::Image in it and I specified the 
file in the image properties.  After that I used Glade to generate the 
code and it did something like this:

====================================================================================
static const unsigned char icon_svg_data[] =
{       	60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,
	46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,
	70,45,56,34,32,115,116,97,110,100,97,108,111,110,101,61,
	34,110,111,34,63,62,10,60,33,45,45,32,67,114,101,97,
	116,101,100,32,119,105,116,104,32,73,110,107,115,99,97,112,
	101,32,40,104,116,116,112,58,47,47,119,119,119,46,105,110,
	107,115,99,97,112,101,46,111,114,103,47,41,32,45,45,62
};

Glib::RefPtr<Gdk::PixbufLoader> _image1_loader=Gdk::PixbufLoader::create();
_image1_loader->write(specialokecount_chip_svg_data, sizeof 
specialokecount_chip_svg_data);
_image1_loader->close();

Gtk::Image *image1 = Gtk::manage(new class 
Gtk::Image(_image1_loader->get_pixbuf()));
====================================================================================

And if you put a call to set_size() before the write() function you can 
scale you svg images.
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtkmm-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic