.NET Chronicles

Temas relacionados con el desarrollo de aplicaciones con .NET

Octavio Telis

Monthly Archives: August 2011

Mostrar archivos de imagen en WPF

Hola Qué Tal…

En esta ocasión quiero comenzar una serie de artículos sobre el manejo de archivos de imágenes con .NET.

En esta primera parte voy a tratar la manera de cargar un archivo de imagen en un contenedor de imagen, en este caso usaré WPF y el control Image que viene incluido en el .NET Framework.

Es común que en ocasiones las aplicaciones requieran de seleccionar archivos y mostrarlos en la interfaz de usuario, bueno, este ejemplo constará de varias partes para lograr el objetivo.

Primeramente será utilizar un OpenFileDialog para seleccionar la imagen que cargaremos en el control image. Obviamente usaremos un botón para esta acción. Una vez seleccionada la imagen deberemos procesarla para utilizarla como un BitmapImage para cargarla en la propiedad Source del control image.

 

Utilizaremos un formulario con un control Images denominado imgFoto, un botón denominado btnFoto como se muestra a continuación:

 

<Window x:Class=”EjemplosWPF.MainWindow”

        xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

        Title=”MainWindow” Height=”350″ Width=”525″>

    <Grid>

        <StackPanel HorizontalAlignment=”Center” VerticalAlignment=”Center”>

            <Image x:Name=”imgFoto” Width=”100″ Height=”100″ Margin=”5″/>

            <Button x:Name=”btnFoto” Width=”100″ Height=”25″

                    Content=”Agregar Foto” Margin=”5″ Click=”btnFoto_Click”/>

        </StackPanel>

    </Grid>

</Window>

 

En el evento click del botón btnFoto irá lo siguiente:

 

private void btnFoto_Click(object sender, RoutedEventArgs e)

{

    if (imgFoto.Source == null)

    {

        OpenFileDialog openFile = new OpenFileDialog();

        BitmapImage b = new BitmapImage();

        openFile.Title = “Seleccione la Imagen a Mostrar”;

        openFile.Filter = “Todos(*.*)|*.*|Imagenes|*.jpg;*.gif;*.png;*.bmp”;

        if (openFile.ShowDialog() == true)

        {

            b.BeginInit();

            b.UriSource = new Uri(openFile.FileName);

            b.EndInit();

            imgFoto.Stretch = Stretch.Fill;

            imgFoto.Source = b;

 

            btnFoto.Content = “Quitar Foto”;

        }

    }

    else

    {

        imgFoto.Source = null;

        btnFoto.Content = “Agregar Foto”;

    }

}

 

 Podemos ver que se evalúa si el control imgFoto ya contiene una imagen o no para cambiar el texto del botón, solo por funcionalidad. Además, si desean validar el tamaño de la foto que desean cargar se puede agregar una condición que restrinja esta acción. Quedando el código opcional del evento click del botón btnFoto como sigue:

 

private void btnFoto_Click(object sender, RoutedEventArgs e)

{

    if (imgFoto.Source == null)

    {

        OpenFileDialog openFile = new OpenFileDialog();

        BitmapImage b = new BitmapImage();

        openFile.Title = “Seleccione la Imagen a Mostrar”;

        openFile.Filter = “Todos(*.*)|*.*|Imagenes|*.jpg;*.gif;*.png;*.bmp”;

        if (openFile.ShowDialog() == true)

        {

            if (new FileInfo(openFile.FileName).Length > 131072)

            {

                MessageBox.Show(

                    “El tamaño máximo permitido de la imagen es de 128 KB”,

                    “Mensaje de Sistema”,

                MessageBoxButton.OK,

                MessageBoxImage.Warning,

                MessageBoxResult.OK);

                return;

            }

 

            b.BeginInit();

            b.UriSource = new Uri(openFile.FileName);

            b.EndInit();

            imgFoto.Stretch = Stretch.Fill;

            imgFoto.Source = b;

 

            btnFoto.Content = “Quitar Foto”;

        }

    }

    else

    {

        imgFoto.Source = null;

        btnFoto.Content = “Agregar Foto”;

    }

}

 

En esta parte se restringe el tamaño a 128 Kb, informando al usuario que no es posible cargar imágenes mayores.

 

Bien, esta funcionalidad es simple y básica, sin embargo, lo interesante será ver cómo utilizar esta capacidad para almacenar el contenido de la imagen cuando se utiliza una clase enlazada al control, esto es, tener un “Binding” hacia la propiedad source del control, pero esto lo veremos en el siguiente artículo.

 

Espero que sea de utilidad.

 

Saludos…

 

Octavio Telis

Comparar dos DataTables según sus DataRows

Hola que tal.

En ocasiones es necesario comparar el contenido de dos DataTable para determinar qué registros (DataRow) están en una y en otra no.

Supongamos tenemos dos DataTable; dt1 y dt2, ambas con el mismo esquema. La tabla dt2 contiene más registros que la taba dt1, por lo que deseamos saber qué registros de dt2 no están incluidos en dt1 comparando por uno de los campos de los registros, en nuestro ejemplo el campo IdCliente. Para determinar esto utilizaremos la siguiente consulta:

DataTable dtRes = new DataTable();

dtRes = dt2.AsEnumerable()

    .Where(r =>

        !dt1.AsEnumerable().Any(w =>

            w.Field<int>(“IdCliente”) == r.Field<int>(“IdCliente”)))

        .CopyToDataTable<DataRow>();

 

Considerar que esta consulta devolverá los campos de dt2 que no están en dt1, si  se quiere el efecto contrario, modificaremos la expresión lambda quitando la negación de la consulta, quedando como sigue:

DataTable dtRes = new DataTable();

dtRes = dt2.AsEnumerable()

    .Where(r =>

        dt1.AsEnumerable().Any(w =>

            w.Field<int>(“IdCliente”) == r.Field<int>(“IdCliente”)))

        .CopyToDataTable<DataRow>();

 

Consideremos que la segunda consulta traerá todos los registros de dt2 que están en dt1, por lo que puede ser que la consulta devuelva todos los registros de dt1 o menos.

Si ninguna de las tablas tienen coincidencias entonces, devolverá 0 campos. Ambas tablas deben tener la misma estructura para que funcione.

Espero te sea de utilidad.

Saludos…

Octavio Telis

 

 

.NET Chronicles
  • Eventos del Teclado en WPF July 22, 2015
      Hola ¿qué tal? En esta ocasión como como continuidad a lo que previamente había escrito sobre los eventos del teclado en Windows Forms, haré un artículo sobre el uso de los eventos del teclado en WPF, así es en Windows Presentation Foundation. No es desconocido por muchos que el nuevo estándar de desarrollo de […]
  • Programación Orientada a Objetos (Introducción) May 14, 2014
    Hola qué tal… Aquí les dejo este video sobre la programación orientada a objetos, a manera de preámbulo a los siguientes videos, con las bases de la programación en C# y otra línea con algunas utilerías. Saludos… Octavio Telis
  • Capítulo piloto del la versión en video de .NET Chronicles May 6, 2014
    Hola qué tal??? Pues en esta ocasión estoy compartiendo con ustedes la liga de un video piloto, con el que pretendo comunicar un poco más sobre las tecnologías .NET y los lenguajes de Programación. En esta ocasión será con la presentación de C#, en un capitulo titulado “Te presento a C#”, espero que sea de […]
  • Validación de datos de entrada con enlace a datos en WPF May 27, 2012
    Tweet Hola, qué tal. Ya que he venido hablando del enlace a datos en WPF en las publicaciones anteriores, bien convendría considerar el uso del Binding para validar datos, hemos tocado ya algunos puntos necesarios para escribir esta funcionalidad. En las publicaciones anteriores vimos ya como enlazar los datos, además, cómo convertir los datos, ahora, […]
  • Uso de la propiedad Visibility con valores booleanos en WPF May 25, 2012
    Tweet    Hola que tal. En esta ocasión quiero compartir con ustedes una manera para utilizar la propiedad Visibility con un valor bool. Te preguntarás “¿Y qué sentido tiene eso?”, bien, el detalles está en que en ocasiones se requiere que la visibilidad de un control de la interfaz de usuario responda a un valor […]
  • Conversión de Valores con Enlace a Datos May 24, 2012
    Tweet     Hola que tal. En el diseño de aplicaciones con WPF tendremos muchas ventajas en cuanto a la interfaz de usuario se refiere, dado que es un modelo muy flexible, nos permite dar formato y estilo a la apariencia de la interfaz de usuario, logrando aplicaciones más agradables, vistosas y que mejoran por mucho […]
  • Mostrar archivos de imagen en WPF utilizando enlace a datos. May 23, 2012
    Tweet Holal Qué tal. Continuando con el ejemplo del post anterior (http://bit.ly/oh0m9k), referente al manejo de imágenes en WPF, ejemplificaremos el manejo de las imágenes de la misma manera pero, esta vez, utilizando enlace a datos y la clase Binding. Antes, tenemos que hablar un poco de lo que es el enlace a datos con […]
  • Mostrar archivos de imagen en WPF August 26, 2011
    Hola Qué Tal… En esta ocasión quiero comenzar una serie de artículos sobre el manejo de archivos de imágenes con .NET. En esta primera parte voy a tratar la manera de cargar un archivo de imagen en un contenedor de imagen, en este caso usaré WPF y el control Image que viene incluido en el […]
  • Comparar dos DataTables según sus DataRows August 23, 2011
    Hola que tal. En ocasiones es necesario comparar el contenido de dos DataTable para determinar qué registros (DataRow) están en una y en otra no. Supongamos tenemos dos DataTable; dt1 y dt2, ambas con el mismo esquema. La tabla dt2 contiene más registros que la taba dt1, por lo que deseamos saber qué registros de […]
  • Arquitectura – Definición de un Data Access Component (con un ejemplo) Parte 3 May 14, 2010
    Hola Qué Tal? En esta ocasión, no he dejado pasar tanto tiempo para terminar la trilogía del uso de Data Access Component con un ejemplo. Bien, pues en este artículo veremos el uso del componente ya creado, cómo extenderemos la funcionalidad del componente y cómo lo aplicamos en la interfaz de usuario. Primeramente, debemos crear […]