Portál AbcLinuxu, 5. května 2025 09:03

Dotaz: Nacteni obrazku pres knihovny gtk

4.4.2008 02:04 Tommy.86 | skóre: 4
Nacteni obrazku pres knihovny gtk
Přečteno: 386×
Odpovědět | Admin
dobry den, delam si grafiku s glade designerem a kombinuju to s anjutou, chtel jsem si pridat do prazdneho okna obrazek 000.png, v glade se vygeneroval kod, do adresare s projektem se vytvorila slozka pixmap a do ni se ulozit obrazek

kod v programu:

image1 = create_pixmap (main_window, "000.png");
gtk_widget_show (image1);

avsak kdyz jsem program zkomiloval, obrazek se nezobrazil a vypsalo to chybu:

** WARNING **: Couldn't find pixmap file: 000.png

poradi nekdo? dekuju
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

e.lisak avatar 4.4.2008 08:23 e.lisak | skóre: 23
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je obrazek ulozen tam, kde ho vas program ocekava ?
podle zpusobu zapisu bych tipnul, ze se program snazi nacist obrazek z aktualniho adresare

Jinak ta chybicka se opravdu objevila pri kompilaci ??

4.4.2008 09:59 Tommy.86 | skóre: 4
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
Odpovědět | | Sbalit | Link | Blokovat | Admin
omlouvam se, pri kompilaci ne, az kdyz se program spustil, kompilace probehla vporadku, zkousel sem obrazek nakopirovat do kazde slozky v projektu, ale vysledek je stejny
e.lisak avatar 4.4.2008 11:06 e.lisak | skóre: 23
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
strace nepomuze ?
podivat se kde to ten program vlastne hleda...
4.4.2008 11:04 crusoe
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
Odpovědět | | Sbalit | Link | Blokovat | Admin
1. Co je to za funkcia create_pixmap? v dokumentacii gtk+ som to nenasiel 
2.Mas gtk+ skompilovane s podporou png ?
3. A co absolutna cesta  create_pixmap (main_window, "/home/user/000.png");
4.GtkPixmap has been deprecated since GTK+ 2.0 and should not be used in newly written code. Use GtkImage instead. Teda funkcie GtkPixmap uz nie su podporovane

http://library.gnome.org/devel/gtk/2.13/GtkPixmap.html
4.4.2008 12:57 Tommy.86 | skóre: 4
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
1. v dokumentaci GTK, ktera je volne ke stazeni neni vkladani obrazku zpracovane
2. urcite mam, zkousel jsem i jine formaty jako ico, gif, jpg, bmp ale vysledek stejny
3. vyzkousel jsem a vyhodilo to to same
4.4.2008 13:47 Tommy.86 | skóre: 4
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vlozim sem radeji cely program
#ifdef HAVE_CONFIG_H
#  include "config.h"
#endif

#include "sys/types.h"
#include "sys/stat.h"
#include "unistd.h"
#include "string.h"
#include "stdio.h"
#include "gtk/gtk.h"


void  add_pixmap_directory (const gchar *directory);
GtkWidget* create_pixmap  (GtkWidget *widget, const gchar *filename);

static GList *pixmaps_directories = NULL;

/* Use this function to set the directory containing installed pixmaps. */
void add_pixmap_directory  (const gchar  *directory)
{
  pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory));
}

/* This is an internally used function to find pixmap files. */
static gchar* find_pixmap_file  (const gchar *filename)
{
  GList *elem;

  elem = pixmaps_directories;
  while (elem)
    {
      gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, G_DIR_SEPARATOR_S, filename);
      if (g_file_test (pathname, G_FILE_TEST_EXISTS))
        return pathname;
      g_free (pathname);
      elem = elem->next;
    }
  return NULL;
}

/* This is an internally used function to create pixmaps. */
GtkWidget* create_pixmap (GtkWidget *widget,  const gchar     *filename)
{
  gchar *pathname = NULL;
  GtkWidget *pixmap;

  if (!filename || !filename[0])
      return gtk_image_new ();

  pathname = find_pixmap_file (filename);

  if (!pathname)
    {
      g_warning ("Couldn't find pixmap file: %s", filename);
      return gtk_image_new ();
    }

  pixmap = gtk_image_new_from_file (pathname);
  g_free (pathname);
  return pixmap;
}



int main (int argc, char *argv[])
{
  GtkWidget *window1;
  GtkWidget *fixed1;
  GtkWidget *image1;

  gtk_set_locale ();
  gtk_init (&argc, &argv);

  add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");

  window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window1), "window1");

  fixed1 = gtk_fixed_new ();
  gtk_widget_show (fixed1);
  gtk_container_add (GTK_CONTAINER (window1), fixed1);

  image1 = create_pixmap (window1, "logo.png");
  gtk_widget_show (image1);
  gtk_fixed_put (GTK_FIXED (fixed1), image1, 88, 96);
  gtk_widget_set_size_request (image1, 216, 72);
  gtk_widget_show (window1);

  gtk_main ();
  return 0;
}
4.4.2008 14:57 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
Treba zistiť, aký adresár je vlastne použitý vo funkcii
add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");
Pri testovaní je možné tam pridať aj ďalší adresár (napr. "./pixmaps" ...).
4.4.2008 18:12 Tommy.86 | skóre: 4
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
nevim si rady :(
4.4.2008 19:27 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
S čím? Tie konštanty PACKAGE_DATA_DIR a PACKAGE sú pravdepodobne v súbore config.h Z toho sa potom bude dať určiť, kde ten program očakáva ten obrázok.

Na vyskúšanie sa tam môže pridať
add_pixmap_directory (".");
(ale normálne nainštalovaný program by asi mal mať obrázky v /usr/share/nieco alebo /usr/local/share/nieco)

Inak ja by som tam ešte pridal
g_signal_connect(window1, "delete_event", G_CALLBACK(gtk_main_quit), NULL);
(aby sa ten program dal jednoduchšie ukončiť).
4.4.2008 19:40 Tommy.86 | skóre: 4
Rozbalit Rozbalit vše Re: Nacteni obrazku pres knihovny gtk
no slava, nakonec stacil jenom jeden prikaz :), ale diky za pomoc

image1 = g_object_new(GTK_TYPE_IMAGE, "file", "000.png", NULL);

#include "gtk/gtk.h"


int main (int argc, char *argv[])
{
  GtkWidget *window1;
  GtkWidget *fixed1;
  GtkWidget *image1;

  gtk_set_locale ();
  gtk_init (&argc, &argv);

  window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window1), "window1");

  fixed1 = gtk_fixed_new ();
  gtk_widget_show (fixed1);
  gtk_container_add (GTK_CONTAINER (window1), fixed1);

  image1 = g_object_new(GTK_TYPE_IMAGE, "file", "000.png", NULL);
  gtk_fixed_put (GTK_FIXED (fixed1), image1, 50, 50);
  gtk_widget_set_size_request (image1, 216, 72);

  gtk_widget_show (image1);
  gtk_widget_show (window1);

  gtk_main ();
   
  return 0;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.