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