Silverlight para Windows Phone incluye varias herramientas de fcil uso para la cmara y el uso de fotos. Aqu vamos a mostrar cmo tomar y guardar fotos con la cmara de Windows Phone y seleccionar y mostrar fotos de la galera interna de Windows Phone. Esta prctica se divide en las siguientes secciones: Creando una interfaz de usuario para la cmara y visualizacin de fotos. Tomando, seleccionando y visualizando imgenes. Guardando imgenes en la Biblioteca de Imgenes.
Actividades
1. Creando una interfaz de usuario para la cmara y visualizacin de Fotos. Inicia Visual Studio y comienza un proyecto de tipo "Silverlight para Windows Phone". A continuacin, crea una interfaz de usuario (UI) que tiene los siguientes elementos: Dos campos TextBlock - uno con un nombre significativo que mostrar los mensajes de estado y una etiqueta TextBlock que dice simplemente: "Desconecte el telfono del software de Zune para ejecutar". Un Image con un nombre significativo que tendr su fuente dinmicamente actualizada para reflejar la nueva imagen que fue tomada o elegida. Tres botones con nombres significativos que se utilizarn para tomar una nueva foto, mostrar una foto existente, y guardaren el almacenamiento del telfono la foto mostrada. En este artculo, estos botones se llaman takePhotoButton , choosePhotoButton y savePhotoButton , respectivamente. 2. Tomando, Seleccionando y Visualizando imgenes En el Explorador de soluciones, abre el archivo MainPage.xaml.cs, y agrega las referencias por defecto en su lugar. Esto le da acceso a tu cdigo a los espacios de nombres necesarios para abrir la aplicacin de la cmara en el telfono y tomar una imagen, usar un objeto de mapa de bits de reescritura para almacenar los datos de la imagen temporal, usar un stream de memoria para convertir la imagen en un archivo, guardar la imagen en el almacenamiento interno del Jairo Arturo Contreras Villagrana Ing. en Software Facultad de Telemtica Programacin de Dispositivos Mviles
namespace Actividad9 { public partial class MainPage : PhoneApplicationPage { CameraCaptureTask cameraCaptureTask; PhotoChooserTask photoChooserTask; BitmapImage bmp; // Constructor public MainPage() { InitializeComponent(); cameraCaptureTask = new CameraCaptureTask(); cameraCaptureTask.Completed += new EventHandler<PhotoResult>(photoCaptureOrSelectionCompleted); photoChooserTask = new PhotoChooserTask(); photoChooserTask.Completed += new EventHandler<PhotoResult>(photoCaptureOrSelectionCompleted); } void photoCaptureOrSelectionCompleted(object sender, PhotoResult e) { if (e.TaskResult == TaskResult.OK) { bmp = new BitmapImage();
Jairo Arturo Contreras Villagrana Ing. en Software Facultad de Telemtica Programacin de Dispositivos Mviles
private void button1_Click(object sender, RoutedEventArgs e) { cameraCaptureTask.Show(); } private void button2_Click(object sender, RoutedEventArgs e) { photoChooserTask.Show(); } private void button3_Click(object sender, RoutedEventArgs e) { { try { // Crea un nombre de archivo para el archivo JPEG en el almacenamiento aislado. String tempJPEG = "TempJPEG"; // Crea el almacenamiento virtual y el stream del archivo. Compruebe, si hay archivos duplicados tempJPEG. var myStore =IsolatedStorageFile.GetUserStoreForApplication(); if (myStore.FileExists(tempJPEG)) { myStore.DeleteFile(tempJPEG); } IsolatedStorageFileStream myFileStream =myStore.CreateFile(tempJPEG); // Se crea un stream del archivo JPEG. // En lugar de MyQuickApp en la URI, utilice elnombre de proyecto correcto. // El uso de TempJPEG se estableci anteriormente. Uri uri = new Uri("MyQuickApp;component/TempJPEG.jpg", UriKind.Relative); // Crear un nuevo objeto WriteableBitmap y estableceel stream de JPEG. WriteableBitmap wb = new WriteableBitmap(bmp);
Jairo Arturo Contreras Villagrana Ing. en Software Facultad de Telemtica Programacin de Dispositivos Mviles
// Codifica un objetoWriteableBitmap a un stream JPEG. // SaveJpeg (mapade bits WriteableBitmap, targetStream Stream, targetWidth int, // targetHeight int, int orientacin, la calidad int)Extensions.SaveJpeg(wb,myFileStream, wb.PixelWidth, wb.PixelHeight, 0, 85); myFileStream.Close(); // Se crea un nuevo stream en el almacenamiento aislado, yguarda el archivo JPEG // en la biblioteca de medios de Windows Phone. myFileStream = myStore.OpenFile(tempJPEG,FileMode.Open, FileAccess.Read); MediaLibrary library = new MediaLibrary(); Picture pic =library.SavePicture("SavedPicture.jpg", myFileStream); myFileStream.Close(); button3.IsEnabled = false; textBlock2.Text = "Saved!"; } catch (Exception myError) { textBlock2.Text = myError.Message; } } } } }
RESULTADOS
Jairo Arturo Contreras Villagrana Ing. en Software Facultad de Telemtica Programacin de Dispositivos Mviles
Jairo Arturo Contreras Villagrana Ing. en Software Facultad de Telemtica Programacin de Dispositivos Mviles
Jairo Arturo Contreras Villagrana Ing. en Software Facultad de Telemtica Programacin de Dispositivos Mviles
CONCLUSIONES
Mediante esta prctica, est programada para realizar las funciones de una aplicacin utilizando la cmara fotogrfica que incluye el dispositivo mvil y en su defecto el emulador. En algunas ocasiones hay actualizaciones de las APIs y en una parte del cdigo se tuvo que introducir manualmente. Y por ende la parte de guardar la imagen en el dispositivo emulado, no se pudo realizar.
Jairo Arturo Contreras Villagrana Ing. en Software Facultad de Telemtica Programacin de Dispositivos Mviles