Buscar este blog

martes, 11 de junio de 2013

Cambiar de tamaño automaticamente la imagen de un Gtk.Image

A continuación les pongo el código de una clase que cambia estomáticamente el tamaño de un Gtk.Image al crear o cambiar el tamaño del objeto, es decir el equivalente a la propiedad zoom de un PictureBox de Windows.Forms.
El proceso es captar el evento expose que ocurre al cambiar de tamaño del objeto y ahí escalar la imagen usando la clase Gdk.Pixbuf para mantener la proporción de la imagen se crea el objeto dentro de un AspectFrame.

El código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Gtk;
using Gdk;
 
namespace Test {
    internal class ImageResize {
        private Gtk.Image _Wrapped = null;
        private Pixbuf original = null;
        private string _File = null;
        public ImageResize(Gtk.Image wrapped) {
            _Wrapped = wrapped;
            _Wrapped.ExposeEvent += new ExposeEventHandler(ImageResize_ExposeEvent);
        }
        void ImageResize_ExposeEvent(object o, ExposeEventArgs args) {
            Pixbuf newPix = new Pixbuf(original.Colorspace, original.HasAlpha, original.BitsPerSample, _Wrapped.Allocation.Width, _Wrapped.Allocation.Height);
            double zoom = (double)((double)_Wrapped.Allocation.Width / (double)((double)original.Width));
            original.Scale(newPix, 0, 0, _Wrapped.Allocation.Width, _Wrapped.Allocation.Height, 0, 0, zoom, zoom, InterpType.Nearest);
            _Wrapped.Pixbuf = newPix;
        }
        public string File {
            get {
                return _File;
            }
            set {
                _File = value;
                original = new Pixbuf(_File);
                ImageResize_ExposeEvent(this, null);
            }
        }
    }
}

No hay comentarios:

Publicar un comentario