Ejemplo MonoDevelop: Gdk.Pixbuf

De ahora en adelante voy a subir algunos ejemplos hechos en MonoDevelop, la verdad es que son bastante simples, tal vez demasiado. Mas que nada es por aprender yo mismo y ayudar a alguien que puede aprovechar los ejemplos. Y también es porque, cuando busqué ejemplos en Internet no encontré muchos y la documentación de Mono es poca, incluso en ingles hay poca documentación. No trato de ofender a nadie con esto de la documentación.

Son algunas cosas de las que aprendido en MonoDevelop, ya sea Cairo, Canvas, System, GtkSharp, GdkSharp, etc… Pero por ahora voy a ocupar solamente C# como lenguaje. Y la mayoría de los ejemplos estarán dentro de una solución MonoDevelop 1.0 (por ahora), por que no esta mal decir que para abrir la solución por completo hay que ejecutar el archivo *.mds (pixbuf.mds en este caso) con la aplicación MonoDevelop.

Aquí va un ejemplo bastante sencillo. Es solo una cara que se muestra a través de una ventana, lo único que podría ser interesante es que el dibujo esta dentro del código en una clase llamada dibujo. Que no es mas que un vector de string estático, de solo lectura.

public static readonly string [] cara_xpm = new string [] {…}
Que luego se guarda dentro de una instancia de la clase Gdk.Pixbuf y se añada a una imagen (Gdk.Image), y esta se añade a una ventana.


Aquí el código: Ejemplo: Gdk.Pixbuf

Los comentarios son buen atendidos, saludos.

3 thoughts on “Ejemplo MonoDevelop: Gdk.Pixbuf

  1. Desde hace tiempo tengo un problema y es que no puedo guardar lo que tengo dibujado en un drawingarea de GTK, utilizo la libreria itextsharp para exportar dicha imagen pero solo funciona si la imagen es del tipo system.drawing.image o itextsharp.text.image, como puedo convertir el gdk.Image de mi Gtk.DrawingArea a alguno de estos formatos, o como la puedo simplemente guardar en mi disco duro en formato jpg u otro.

    • Gtk.Image Tiene una propiedad que retorna un objeto Gdk.Pixbuf (la propiedad Gtk.Image.Pixbuf) y desde ahí puedes sacarlo como png o jpeg

      Gtk.Image MiImage = new Gtk.Image("data/linux.png");
      MiPixbuf = MiImage.Pixbuf;
      MiPixbuf.Save ("nombre", "png");

      Mira este ejemplo –>

       
      // Compilar: gmcs ImagenesPNG5.cs -pkg:gtk-sharp-2.0 -r:Mono.Cairo -res:data/linux.png
      // 
      // Nota: "-res:" indica que se agrega el archivo al ejecutable.
      //
      
      using System;
      using Cairo;
      using Gtk;
      using Gdk;
      
      public class Ventana : Gtk.Window
      {
      	public Ventana (string str) : base (str)
      	{
      		this.DeleteEvent += new DeleteEventHandler (CerrarVentana);
      		
      		DrawingArea da = new CairoGraphic ();
      		Box vbox = new VBox (true, 0);
      
      	//	da.Size (300, 500);
      		this.Resize (512, 512);		
      
      		vbox.Add (da);
      		this.Add (vbox);		 	
      				
      		this.ShowAll ();
      	} 
      
      	private static void CerrarVentana (object o, DeleteEventArgs args)
      	{
      		Application.Quit ();
      	}
      }
      
      public class CairoGraphic : DrawingArea
      {
      	private int r = 0;
      
      	public CairoGraphic ()
      	{
      		Gtk.Image MiImage = new Gtk.Image("data/linux.png");
      		this.pb = MiImage.Pixbuf;
      		this.pb.Save ("nombre", "png");
      
      		GLib.Timeout.Add (50, new GLib.TimeoutHandler (Siempre));
      	}
      
      	private bool Siempre ()
      	{
      		QueueDraw ();
      		return true;
      	}	
      
      	protected override bool OnExposeEvent (Gdk.EventExpose args)
      	{
      		r++;
      
      		using (Context c = Gdk.CairoHelper.Create (args.Window)) {
      			double w = pb.Width;
      			double h = pb.Height;
      			
      			c.Translate (250.0, 250.0);
      			
      			// Para rotar desde el centro de la imagen
      			c.Rotate (r * (System.Math.PI / 180));
      			// Para rotar desde el centro de la imagen	
      			c.Translate (-0.5 * w, -0.5 * h);
      			
      			// Agregar un Gdk.Pixbuf a un Cairo.Context
      			CairoHelper.SetSourcePixbuf(c, pb, 0, 0);
      
      			c.Paint ();
      		}
      		
      		return true;
      	}
      
      	private Gdk.Pixbuf pb;
      }
      
      class ClasePrincipal
      {
      	public static void Main ()
      	{
      		Application.Init ();
      		
      		new Ventana ("ImagenesPNG4");
      		
      		Application.Run ();
      	}
      }
      

      Después te explico mejor …

    • Mira este ejemplo hace esto ->
      Gtk.Image >> Gdk.Pixbuf >> png en el disco xD

      También soporta jpeg y no me acuerdo que mas.

      El ejemplo lo ilustra mucho mejor que el anterior –>

       
      // Compilar: gmcs SS.cs -pkg:gtk-sharp-2.0
      
      using System;
      using Gtk;
      
      public class Ventana
      {
      	public static void Main ()
      	{
      		// Inicia las librerías GTK
      		Application.Init ();
      
      		// Guarda la imagen que esta en el disco duro a
      		// un objeto de Gtk.Image
      		Gtk.Image MiImage = new Image ("data/linux.png");
      
      		// Se crea el objeto Pixbuf
      		Gdk.Pixbuf pix;
      
      		// Pasar un objeto Gdk.Pixbuf desde la propiedad
      		// de los objetos Gtk.Image
      		pix = MiImage.Pixbuf;
      
      		// Guarda la imagen en el disco duro, en el directorio
      		// del ejecutable
      		pix.Save ("nombre", "png");
      	}
      }
      

      Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s