20.12.11

Aprender Windows Phone 7 (parte 37): Windows Phone 7 Chooser - PhotoChooserTask

PhotoChooserTask lanza la aplicación de Selección de Fotografías. Si el usuario completa la operación, entonces devuelve un stream con la imagen.


En la documentación aparece este ejemplo:

public partial class MainPage : PhoneApplicationPage
{
// Declare the PhotoChooserTask object with page scope.
PhotoChooserTask photoChooserTask;


// Constructor
public MainPage()
{
InitializeComponent();

// Initialize the PhotoChooserTask and assign the Completed handler in the page constructor.
photoChooserTask = new PhotoChooserTask();
photoChooserTask.Completed += new EventHandler(photoChooserTask_Completed);
}


// In this example, the PhotoChooserTask is shown in response to a button click
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
photoChooserTask.Show();
}
catch (System.InvalidOperationException ex)
{
// Catch the exception, but no handling is necessary.
}
}


// The Completed event handler. In this example, a new BitmapImage is created and
// the source is set to the result stream from the PhotoChooserTask
void photoChooserTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
System.Windows.Media.Imaging.BitmapImage bmp =
new System.Windows.Media.Imaging.BitmapImage();
bmp.SetSource(e.ChosenPhoto);
}
}
}

Nosotros vamos a crear un programa en el que el usuario pueda llamar a este chooser y elegir una imagen que haya en el teléfono.


Creando el proyecto

Abrimos Visual Studio y creamos un nuevo proyecto, para ello hay que pulsar en el menú "File" -> opción "New Project".

En la nueva ventana he seleccionado las opciones "Visual C#" -> "Silverlight for Windows Phone" -> "Windows Phone Application". Los demás datos son:



Name = PhotoChooserTaskExample
Location = (la que queráis, yo lo puse en...) C:\A_warterrain_A\Ejemplos WP7\ PhotoChooserTaskExample\
SolutionName = PhotoChooserTaskExample

A continuación se pide la versión de la aplicación. Seleccionamos Windows Phone 7.1 y damos a Ok.



Vamos a cambiar el interfaz de la página:

- Titulo "PHOTOCHOOSERTASK EXAMPLE".
- Titulo "principal".
- Un Button para lanzar la aplicación de selección de fotos.
- Y un control Image para mostrar la imagen seleccionada.

Con el siguiente formato final:




Hay que agregar la siguiente librería:

using Microsoft.Phone.Tasks;


Creamos un atributo de la clase PhoneChooserTask en la página principal:

PhotoChooserTask photoChooserTask;


En el constructor hemos creado el objeto y hemos asignado el evento Completed.

photoChooserTask = new PhotoChooserTask();
photoChooserTask.Completed += new EventHandler(photoChooserTask_Completed);


Y agregamos el método:

void photoChooserTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
System.Windows.Media.Imaging.BitmapImage bmp =
new System.Windows.Media.Imaging.BitmapImage();
bmp.SetSource(e.ChosenPhoto);
imagePhoto.Source = bmp;
}
}


Cuando se pulse el botón se ejecutará el siguiente código fuente:

private void buttonSelectPhoto_Click(object sender, RoutedEventArgs e)
{
try
{
photoChooserTask.Show();
}
catch (System.InvalidOperationException ex)
{
// Catch the exception, but no handling is necessary.
}
}


Pues vamos a ver qué tal ha quedado. Pulsamos en "Debug" -> "Start debugging" arrancaremos el emulador.

Tras un momento en que se ha estado iniciando el emulador, veréis el programa en el emulador de Windows Phone 7.



Si pulsamos Seleccionar imagen pasaremos a la aplicación de Selección de imágenes:



Si seleccionamos una imagen volveremos a la aplicación:



Y se mostrará la imagen en nuestro control Image.

2 comments:

  1. imagePhoto.Source = bmp; //AQUE TE REFIERES CON (imagePhoto.Source). Por que me marca que no existe en el contexto actual

    ReplyDelete
  2. (Actualizado) Actualizo el comentario porque las prisas me han jugado una mala pasada.

    Este artículo es del 2011 y era para programar dispositivos Windows Phone 7.

    La versión actual es Windows Phone 8 y el SDK de Windows Phone ha cambiado desde esta versión.

    Te recomiendo mirar la nueva versión de este objeto:
    acceder a MDSN

    ReplyDelete