31 octubre 2010

Explorador de Imagenes con C# en .Net

Aquí dejo el código de un sencillo explorador de archivos de imagen que se encuentran en una carpeta. Para todo esto se utiliza un formulario con un botón para abrir el cuadro de dialogo para seleccionar una carpeta del sistema (FolderBrowserDialog) y después se realiza un recorrido en la carpeta para mostrar los archivos que tengan una extensión de imágenes (jpg, bmp, gif, jpeg, etc), los resultados se muestran en un Treeview en forma de nodos que al seleccionar alguno se mostrara en un PictureBox en tamaño pequeño la imagen y ademas se mostraran unos pocos detalles del archivo de imagen.

Para mejor explicación dejo la imagen del programa en ejecución


Lo que aquí se pretende es mostrar la utilización de FolderBrowserDialog, TreeView y PictureBox.

Código del Programa

//
// Pequeño Explorador de Imagenes con C# en .Net
// Programo: http://gsur.blogspot.com
// El uso y modificación del código es libre y no olviden mencionar el origen gsur.blogspot.com
//

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Linq;

class Formulario : Form
{
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.FolderBrowserDialog DialogoSeleccionarCarpetas;
private System.Windows.Forms.Button btnBuscarCarpeta;
private System.Windows.Forms.TreeView Arbol;
private System.Windows.Forms.PictureBox Imagen;
private System.Windows.Forms.Panel PanelSup;
private System.Windows.Forms.Label lblDetalles;
public Formulario()
{
this.DialogoSeleccionarCarpetas = new System.Windows.Forms.FolderBrowserDialog();
this.btnBuscarCarpeta = new System.Windows.Forms.Button();
this.Arbol = new System.Windows.Forms.TreeView();
this.Imagen = new System.Windows.Forms.PictureBox();
this.PanelSup = new System.Windows.Forms.Panel();
this.lblDetalles = new System.Windows.Forms.Label();
this.Size = new System.Drawing.Size(845,610);
this.Text = "Clic en el boton Seleccionar carpeta";

PanelSup.Location = new Point(0,0);
PanelSup.Size = new Size(845, 50);
PanelSup.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
PanelSup.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);
btnBuscarCarpeta.Location = new System.Drawing.Point(8, 10);
btnBuscarCarpeta.Name = "btnBuscarCarpeta";
btnBuscarCarpeta.Size = new System.Drawing.Size(180, 32);
btnBuscarCarpeta.TabIndex = 1;
btnBuscarCarpeta.Text = "Seleccionar Carpeta";
btnBuscarCarpeta.UseVisualStyleBackColor = true;
btnBuscarCarpeta.Click += new System.EventHandler(btnBuscarCarpeta_Click);
Arbol.Location = new Point(8, 64);
Arbol.Size = new Size(480, 515);
Arbol.Anchor = AnchorStyles.Top | AnchorStyles.Left;
Arbol.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(Arbol_AfterSelect);

Imagen.Location = new System.Drawing.Point(490, 64);
Imagen.Size = new System.Drawing.Size(340, 260);
Imagen.TabStop = false;
Imagen.SizeMode = PictureBoxSizeMode.StretchImage;
Imagen.BorderStyle = BorderStyle.Fixed3D;
Imagen.Anchor = AnchorStyles.Top | AnchorStyles.Left;
lblDetalles.Location = new System.Drawing.Point(500,340);
lblDetalles.Font = new Font(lblDetalles.Font.Name, 8, FontStyle.Bold, lblDetalles.Font.Unit);
Controls.Add(PanelSup);
PanelSup.Controls.Add(btnBuscarCarpeta);
Controls.Add(Arbol);
Controls.Add(Imagen);
Controls.Add(lblDetalles);
DialogoSeleccionarCarpetas.ShowNewFolderButton = false;
DialogoSeleccionarCarpetas.RootFolder = Environment.SpecialFolder.Desktop;
}
private void btnBuscarCarpeta_Click(object sender, EventArgs e)
{
System.IO.FileInfo []archivos;
DialogResult result = DialogoSeleccionarCarpetas.ShowDialog();
if( result == DialogResult.OK )
{
this.Text = DialogoSeleccionarCarpetas.SelectedPath;
var dir = new System.IO.DirectoryInfo(DialogoSeleccionarCarpetas.SelectedPath);
//Uso de LINQ to FileSystem (O LINQ to Objects)
var resultado = from arch in dir.GetFiles()
where arch.Extension.ToLower() == ".jpg" ||
arch.Extension.ToLower() == ".bmp" ||
arch.Extension.ToLower() == ".png" ||
arch.Extension.ToLower() == ".gif" ||
arch.Extension.ToLower() == ".jpeg"
select arch;
archivos=resultado.ToArray<System.IO.FileInfo>();
System.IO.FileInfo item;
Arbol.BeginUpdate();
Arbol.Nodes.Clear();
for(int i=0;i<archivos.Length;i++)
{
item = archivos[i];
if (item.Extension.ToLower() == ".jpg" ||
item.Extension.ToLower() == ".bmp" ||
item.Extension.ToLower() == ".png" ||
item.Extension.ToLower() == ".gif" ||
item.Extension.ToLower() == ".jpeg")
{
Arbol.Nodes.Add(item.FullName);
}
}
Arbol.EndUpdate();
}
}

private void Arbol_AfterSelect(System.Object sender, System.Windows.Forms.TreeViewEventArgs e)
{
System.IO.FileInfo ArchivoImagen = new System.IO.FileInfo(Arbol.SelectedNode.FullPath);
long tArchivo = ArchivoImagen.Length;
string tam_Archivo;
if(tArchivo>1024)
{
if(tArchivo / 1024 > 1024)
tam_Archivo = (tArchivo / (1024*1000)).ToString("N") + " Megabytes";
else
tam_Archivo = (tArchivo / 1024).ToString("N") + " Kilobytes";
}
else
tam_Archivo = tArchivo.ToString("N") + " Bytes";
Imagen.Image = System.Drawing.Image.FromFile(Arbol.SelectedNode.FullPath);
lblDetalles.Text = "Nombre: " + ArchivoImagen.Name;
lblDetalles.Text += "nnTamaño del Archivo: " + tam_Archivo;
lblDetalles.Text += "nnDimensiones (Ancho x Alto): ";
lblDetalles.Text += Imagen.Image.Width.ToString("#,###");
lblDetalles.Text += " x " + Imagen.Image.Height.ToString("#,###") + " Pixeles";
lblDetalles.Size = new Size (lblDetalles.PreferredWidth, lblDetalles.PreferredHeight);
}

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
[STAThread]
public static void Main()
{
Application.Run(new Formulario());
}
}

No hay comentarios.: