Ads 468x60px

Perfil

lunes, 11 de febrero de 2013

Desarrollando con la cámara de Windows Phone


Desarrollando con la cámara de Windows Phone
Silverlight para Windows Phone incluye varias herramientas de fácil uso para la cámara y el uso de fotos.  AquĂ­ vamos a mostrar cĂłmo tomar y guardar fotos con la cámara de Windows Phone y seleccionar y mostrar fotos de la galerĂ­a interna de Windows Phone.

Este artĂ­culo se divide en las siguientes secciones:

·         Creando una interfaz de usuario para la cámara y visualizaciĂłn de fotos
·         Tomando, seleccionando y visualizando imágenes
·         Guardando imágenes en la Biblioteca de Imágenes

Descarga el cĂłdigo fuente completo de este tutorialhospedado en la galerĂ­a de cĂłdigo de Silverlight para Windows Phone.

Creando una interfaz de usuario para la cámara y visualizaciĂłn de fotos
Inicia Visual Studio y comienza un proyecto de tipo "Silverlight para Windows Phone".  A continuaciĂłn, 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 telĂ©fono delsoftware de Zune para ejecutar!".
·         Un Image con un nombre significativo que tendrá su fuente dinámicamente actualizada para reflejar la nueva imagen que fue tomada o elegida.
·         Tres botones con nombres significativos que se utilizarán para tomar una nueva foto,mostrar una foto existentey guardar en el almacenamiento del telĂ©fono la foto mostrada. En este artĂ­culo, estos botones se llaman takePhotoButtonchoosePhotoButton ysavePhotoButtonrespectivamente.
Una distribuciĂłn propuesta de estos elementos se muestra a continuaciĂłn:
clip_image002
XAML
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Button Content="Take Photo" Height="72" HorizontalAlignment="Left"
Margin="12,6,0,0" Name="button1" VerticalAlignment="Top"
idth="189" Click="button1_Click" />
<Image Height="308" HorizontalAlignment="Left" Margin="27,275,0,0"
Name="myImage" Stretch="Fill" VerticalAlignment="Top"
Width="406"/>
<Button Content="Choose Existing" Height="72" HorizontalAlignment="Left"
Margin="194,6,0,0" Name="button2" VerticalAlignment="Top"
Width="239" Click="button2_Click" />
<TextBlock Height="30" HorizontalAlignment="Left" Margin="27,162,0,0"
Name="textBlock1" Text="Disconnect phone from Zune software to run!"
VerticalAlignment="Top" Width="406" />
<Button Content="Save Current Photo to Library" Height="72"
HorizontalAlignment="Left" Margin="12,84,0,0" Name="savePhotoButton"
VerticalAlignment="Top" Width="419" IsEnabled="False"
Click="savePhotoButton_Click" />
<TextBlock Height="71" HorizontalAlignment="Left" Margin="29,197,0,0"
Name="statusText" Text="" VerticalAlignment="Top" Width="402"
Foreground="Red" TextWrapping="Wrap" />
</Grid>

Como Ăşltimo paso antes de la codificaciĂłnagrega una referencia a Microsoft.Xna.Framework.Vamos a usar el espacio de nombres Microsoft.Xna.Framework.Media en este ensamblado con el fin de guardar las imágenes en la biblioteca de medios del telĂ©fonoy Ă©ste debe ser referenciado por tu proyecto antes que cualquiera de sus tipos, eventos o mĂ©todos sean utilizados en tu aplicaciĂłn.

Para agregar Microsoft.Xna.Framework en tu aplicaciĂłn:
·         En el Explorador de solucioneshaz derecho en el nodo References en tu proyecto y acontinuaciĂłn, selecciona Add Reference.
·         Selecciona Microsoft.Xna.Framework de la lista y a continuaciĂłn haz clic en OK.

Tomando, Seleccionando y visualizando imágenes
En el Explorador de soluciones, abre el archivo MainPage.xaml.csy agrega las siguientes lĂ­neas decĂłdigo en la parte superior de la páginadejando las referencias por defecto en su lugar.
C#
using Microsoft.Phone.Tasks; using System.Windows.Media.Imaging; using System.IO; using System.IO.IsolatedStorage; using Microsoft.Xna.Framework.Media;

Esto le da acceso a tu cĂłdigo a los espacios de nombres necesarios para abrir la aplicaciĂłn de lacámara en el telĂ©fono y tomar una imagen, usar un objeto de mapa de bits de re-escritura paraalmacenar los datos de la imagen temporal, usar un stream de memoria para convertir la imagenen un archivoguardar la imagen en el almacenamiento interno del telĂ©fonoy mover una imagendel almacenamiento aislado del telĂ©fono a la biblioteca multimedia del telĂ©fono,respectivamente.

La selecciĂłn de fotos y el uso de la cámara requerirán la coordinaciĂłn entre algunos mĂ©todosasĂ­ que vamos a añadir algunos miembros de datos a la clase principal.  Dos de ellos serán objetos Selectores, que permiten a las aplicaciones ceder el control a la funcionalidad integrada en el sistema operativo del telĂ©fono a fin de facilitar las cosas como la elecciĂłn de un contacto de una lista, tomar una foto, o seleccionar una foto de la galerĂ­a de fotos del telĂ©fono.  Otro será una imagen de mapa de bits que se estará utilizando para almacenar la informaciĂłn de la imagen temporal, es decir, imágenes que hemos elegido ya sea desde la galerĂ­a en el telĂ©fono o simplemente tomadas con la cámara.
C#
public partial class MainPage : PhoneApplicationPage
{
// Declarar el objeto CameraCaptureTask con Ăˇmbito de la página.
CameraCaptureTask cameraCaptureTask;
PhotoChooserTask photoChooserTask;
BitmapImage bmp;

cameraCaptureTask y photoChooserTask van a necesitar conectar los manejadores de eventos que se disparan cuando se toma una fotografĂ­a o cuando se elige de la  biblioteca de imágenes del telĂ©fono, respectivamente.  Esto significa que los dos eventos deben ser manejados:
  1. Evento Completed de cameraCaptureTask.
  2. Evento Completed de photoChooserTask.
Este tutorial tiene una peculiaridad: porque en ambos casos sĂłlo queremos mostrar la imagen en pantallay porque los eventos Completed envĂ­an el mismo tipo de objeto a sus manejadores (unPhotoResult), usaremos un mĂ©todo para manejar ambos eventos.  Vamos a llamar a este mĂ©todophotoCaptureOrSelectionCompletedy obtendrá la foto que ha sido tomada por la cámara o seleccionada de la biblioteca de imágenesy la mostrará en la pantalla.  La conexiĂłn de ambos eventos Completed para este nuevo mĂ©todo se realiza en la funciĂłn de inicio de la página,MainPage, dando como resultado lo siguiente:
C#

public MainPage()
{
InitializeComponent();
// Inicializa los objetos Selectores y asigna los manejadores para los eventos "Completed"
cameraCaptureTask = new CameraCaptureTask();
cameraCaptureTask.Completed += new EventHandler<PhotoResult>(photoCaptureOrSelectionCompleted);
photoChooserTask = new PhotoChooserTask();
photoChooserTask.Completed += new EventHandler<PhotoResult<(photoCaptureOrSelectionCompleted);
}

Anteriormente, cuando creamos la interfaz de usuario, agregamos un Image llamado myImage en la pantalla, pero no estableciĂł su propiedad Source, dejándola en blanco.  EnphotoCaptureOrSelectionCompleted, sabemos que el usuario ha tomado o seleccionado una imagen asĂ­ que es momento de establecer la propiedad Source de myImage a esa imagen, despuĂ©s escalar la imagen de modo que quepa la zona de visualizaciĂłn de myImage.  TambiĂ©n actualizaremos el TextBlock statusText si es necesario.  Por Ăşltimo, vamos a activar el botĂłn que permite al usuario guardar la imagen mostrada.

La propiedad Stretch del objeto Image determina cĂłmo la imagen será escalada para ajustarla a las dimensiones de myImageutilizaremos Stretch.Uniform para preservar la relaciĂłn de aspecto de la imagen original.

AsĂ­ que podemos reservar la opciĂłn de guardar esta imagen si el usuario lo deseautilizando elmapa de bits que hemos creado antesllamado bmppara recibir los datos de esta nueva imagen,entonces lo asignaremos a la propiedad Source de myImage de modo que se muestre en la pantalla.  (En otro mĂ©todo que implementaremos despuĂ©s, el contenido de bmp se puede guardar en el almacenamiento interno del telĂ©fono). El aspecto final dephotoCaptureOrSelectionCompleted será asĂ­:
C#
void photoCaptureOrSelectionCompleted(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
bmp = new BitmapImage();
bmp.SetSource(e.ChosenPhoto);
myImage.Source = bmp;
myImage.Stretch = Stretch.Uniform;
// Intercambio los estados de los elementos en la IU
savePhotoButton.IsEnabled = true;
statusText.Text = "";
}
else
{
savePhotoButton.IsEnabled = false;
statusText.Text = "Task Result Error: " + e.TaskResult.ToString();
}
}
Ahora conectamos los botones que colocamos en la interfaz de usuario para iniciar un Selector que nos permitirá tomar o seleccionar una imagen.  Regresa al diseñador de la interfaz de usuario y haz doble clic en el botĂłn "Take Photo".   Esto crea un manejador de evento que será disparado cuando se haga clic en el botĂłn.  Nuestro botĂłn se llama takePhotoButtony sĂłlo necesita una lĂ­nea decĂłdigo para iniciar el Selector.  El evento Completed se disparará cuando la foto sea tomada, manejando el resto.  El resultado es una funciĂłn muy simple llamada takePhotoButton_Click:
C#
// La cámara muestra el Choosers en respuesta a un clic del botĂłn.
private void takePhotoButton_Click(object sender, RoutedEventArgs e)
{
cameraCaptureTask.Show();
}

Ahora haz doble clic en el botĂłn "Choose Existing", que nombramos choosePhotoButton.  Una vezmás, es sĂłlo una lĂ­nea de cĂłdigo para iniciar el Selector que selecciona una foto, lo que resulta enun choosePhotoButton_Click que tiene este aspecto:
C#
// El selector de foto en respuesta a un clic del botĂłn
 private void choosePhotoButton_Click(object sender, RoutedEventArgs e)
{
photoChooserTask.Show();
}

Ahora la aplicaciĂłn es capaz de capturar y seleccionar imágenes existentes y mostrarlas en la pantalla en su relaciĂłn de aspecto correcto.
Como la advertencia en la interfaz de usuario dice, el telĂ©fono debe estar desconectado delsoftware de Zune para que los Selectores sean lanzados correctamente.

Guardando imágenes en la Biblioteca de Imágenes
Con el fin de guardar la imagen a la biblioteca de imágenes del telĂ©fono, debe ser primerocodificada como un JPEG mediante la clase Extensions del espacio de nombresSystem.Windows.Media.Imaging.  Entoncesel ensamblado XNA que hemos importado se utilizarápara usar la clase MediaLibrarycuyo mĂ©todo SavePicture finalmente escribe la imagen a la biblioteca de imágenes del telĂ©fono, donde puede ser sincronizada con la computadora,visualizada en una presentaciĂłn, etc.

Debido a que este proceso implica ambos pasos: guardar la imagen como JPEG y luego importarla ala bibliotecavamos a escribir un archivo JPEG temporal en el almacenamiento interno del telĂ©fonoconocido como el Almacenamiento Aislado.  Entre otras cosasel Almacenamiento Aislado para Windows Phone asigna un espacio exclusivo y seguro de archivos para cada aplicaciĂłnen el telĂ©fono.  No vamos a entrar en detalles aquĂ­ con el uso del Almacenamiento AisladosĂłlo tenemos que utilizar el espacio de almacenamiento de nuestra aplicaciĂłn para escribir nuestroarchivo JPEG temporal.  Se trata de crear primero un archivo vacĂ­oluego asignarle contenido.  Eltipo WriteableBitmap será usado para esta tarearecibiendo el contenido de bmp, nuestros datos de imagen que creamos con anterioridad.  Por Ăşltimoqueremos actualizar el Textblock statusTextcuando tenemos un resultado al guardar la imagen.

Regresa al diseñador de la interfaz de usuario y haz doble clic en el botĂłn "Save Current Photo to Library", al que llamamos savePhotoButton.  Al igual que con los otros botones, esto conecta un manejador de eventos en blanco al evento Click en el botĂłn.  Una vez implementado para cubrir todas las funcionalidades descritas, la versiĂłn final de savePhotoButton_Click se verá asĂ­:



private void savePhotoButton_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 URIutilice el nombre 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 establece el stream de JPEG.
WriteableBitmap wb = new WriteableBitmap(bmp);
/ / Codifica un objeto WriteableBitmap a un stream  JPEG
/ / SaveJpeg (mapa de bits WriteableBitmaptargetStream Stream, targetWidth int
/ / targetHeight intint orientaciĂłnla calidad int)Extensions.SaveJpeg(wb, myFileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);

myFileStream.Close();
/ Se crea un nuevo stream en el almacenamiento aisladoy guarda 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();
savePhotoButton.IsEnabled = false;
statusText.Text = "Saved!";
}
catch (Exception myError)
{
statusText.Text = myError.Message;
}
}

Este tutorial se ha completado, y ahora tienes un ejemplo de un programa que controla la entrada de la cámara, además de leer y escribir en la biblioteca de fotos.  Recuerda desconectar el telĂ©fono del software Zune para que los Selectores en el mĂ©todo Start se puedan ejecutar.

Descarga Emulador de Android BlueStacks App Player,


BlueStacks App Player es un lugar donde te brindara la posibilidad de poder usar mas de 750 mil aplicaciones de Android en tu PC o Mac, para resumirte es un emulador del sistema Android y por eso podremos ejecutar todas las App que corren con Android en donde queramos.



Si estamos buscando un Emulador de Android, te recomendamos BlueStacks App Player, te brindara la posibilidad de probar todas las Aplicaciones que necesitemos en nuestra PC de escritorio o Laptop, ademas no te olvides que podas correr los mismos Juegos que tengas en tusdispositivos mĂłviles con Android, algo bastante interesante.

Algo que destacar es lo simple que es instalar una aplicacion en BlueStacks App Player, solamente debemos buscar la App en el buscador personalizado y pulsar en Instalar.

Se puede ejecutar en Windows 87VistaXP y existe una versiĂłn para Mac OS X.

LINE, para Realizar Llamadas Gratuitas desde la PC


Hoy te traemos un servicio de mensajerĂ­a que esta ganando terreno a nivel mundial y es la fuerte competencia del servicio WhatsApp, te mostramos los detalles, caracterĂ­sticas y como instalarlo en nuestros Dispositivos MĂłviles.

line-gratis

LINE es el Servicio de MensajerĂ­a Instantánea que esta ganando usuarios a un nivel impresionante, esta AplicaciĂłn nos permite realizar llamadas gratuitas desde la PC, ya que muchos usuarios utilizan su VersiĂłn MĂłvil para iOS y Android, ahora se encuentra disponible elSoftware para nuestra PC de Escritorio.

Lo Ăşnico que debes tener en cuenta para tener la VersiĂłn para PC en tu computadora es estar registrado en la VersiĂłn MĂłvil, ya que utiliza los mismos datos de registro para ingresar.

Para los que conocen MS Messenger, tiene algo muy similar, nos permitirá utilizar nuestra Cámara Web para realizar Video Conferencias, ademas de hacer grupos para charlar, algo parecido a Skype.

Por eso LINE es una excelente opciĂłn si nosotros queremos realizar llamadas desde nuestra PC.

Descargar LINE

10 extensiones para mejorar nuestra experiencia en Firefox


Uno de los aspectos más interesantes de navegadores como Opera, Google Chrome o Firefox es su flexibilidad y capacidad de personalizaciĂłn, es decir, podemos adaptar estas aplicaciones a nuestras necesidades y agregar nuevas funcionalidades gracias a la instalaciĂłn de extensiones y complementos. Gracias a las extensiones, podemos poner Ă©nfasis en aspectos relacionados con nuestro trabajo, integrar servicios como Twitter o Evernote en el navegador, ampliar sus usos y leer libros electrĂłnicos o mejorar la seguridad de nuestra navegaciĂłn.
Firefox
El abanico de opciones y funcionalidades a agregar es muy amplio y podemos encontrar, prácticamente, una extensiĂłn para cubrir cualquier tipo de necesidad que tengamos. Si bien la creciente cuota de mercado de Google Chrome hace que el nĂşmero de extensiones y aplicaciones disponibles se haya disparado y la oferta sea muy grande (y con bastante actividad), es importante no olvidarse del navegador de Mozilla, Firefox y, como no, la comunidad de desarrolladores que publica extensiones.
De vez en cuando vale la pena pasarse por la secciĂłn de extensiones de Firefox porque, con cada visita, uno puede descubrir interesantes complementos con los que obtener una mejor experiencia en nuestra navegaciĂłn y mucho más productiva.

Seguridad y privacidad

  • Public Fox es una extensiĂłn con la que podremos salvaguardar una buena parte de nuestros datos personales, por ejemplo, si compartimos nuestro ordenador con otros usuarios o lo cedemos temporalmente. Gracias a este complemento podremos bloquear la realizaciĂłn de descargas con el navegador o establecer una contaseña a los marcadores, la realizaciĂłn de descargas o los complementos.
  • HTTPS Finder es un complemento parecido a HTTPS Everywhere puesto que tiene como objetivo mejorar la seguridad de nuestra navegaciĂłn y forzar el uso de HTTPS, es decir, el uso de SSL en todos aquellos servicios que lo soporten aunque no lo ofrezcan en una primera instancia.
  • anonymoX es una extensiĂłn enfocada en velar por nuestro anonimato en la red puesto que nos permite navegar sin dejar rastro, cambiar nuestra direcciĂłn IP pĂşblica, visitar páginas bloqueadas o cambiar nuestra ubicaciĂłn; acciones que ayudarán a esconder nuestro rastro y preservar dichas funcionalidades.

Productividad

  • list-it es un complemento que tiene su origen en el seno de un grupo de investigaciĂłn del MIT que ha dedicado parte de su tiempo a agregarle a Firefox un sencillo bloc de notas. Las notas que vayamos escribiendo en este cuaderno virtual se almacenarán en nuestro perfil aunque, para mayor seguridad, tambiĂ©n tendremos la opciĂłn de respaldarlas en la nube puesto que el MIT ha puesto a disposiciĂłn de los usuarios un servidor con este fin.
  • Evernote Web Clipper y Clearly son dos complementos desarrollados por Evernote para integrar su servicio de cuadernos virtuales en Firefox. Gracias a Clearly podremos eliminar las distracciones de las páginas que leemos, mostrándonos solamente lo importante y con la posibilidad de transformar estas páginas en notas en Evernote. El Web Clipper tambiĂ©n nos permite capturar informaciĂłn y enviarla a Evernote con la particularidad de poder enviar fragmentos de texto, capturar páginas completas y, directamente, asociarle la libreta destino o las etiquetas a utilizar.
  • Capture & Print es una extensiĂłn que nos ayuda a optimizar el uso del papel a la hora de imprimir puesto que, en vez de imprimir una página completa, lo que hacemos es seleccionar quĂ© partes vamos a imprimir y quedarnos solamente con lo importante.
  • Omnibar es un complemento que, por su nombre, nos debe recordar a Google Chrome puesto que toma prestado de Ă©ste el nombre de su barra de direcciones. En Chrome, el omnibox sirve tanto para realizar bĂşsquedas como para escribir directamente la url que queremos visitar, todo en un mismo lugar; una serie de caracterĂ­sticas que en Firefox podremos implementar gracias a esta extensiĂłn.

ComunicaciĂłn y redes sociales

  • Rapportive es una extensiĂłn que tiene como objetivo dotar de un interfaz algo más agradable a nuestra cuenta de Gmail y, concretamente, a Google Contacts. La idea es que, para todos nuestros contactos, podamos almacenar algo más de informaciĂłn que la que Google, en principio, nos oferta. Podremos crear fichas de nuestros contactos con notas personales, fotografĂ­as, sus coordenadas en las redes sociales o con algunas de sus publicaciones más significativas.
  • Add Back Instagram Integration to Twitter tiene como objetivo salvar el abismo existente entre Instagram y Twitter desde que el primero bloquease la visualizaciĂłn de imágenes en Twitter. Dicho de otra forma, esta extensiĂłn se encargará de insertar las imágenes de Instagram en los tweets que visualicemos (ahorránonos la visita a la web de Instagram)
  • Twitbin es un cliente de Twitter que podremos insertar en nuestra instancia de Firefox para ver cĂłmodamente nuestro timeline, interactuar con otros usuarios y compartir, fácilmente, informaciĂłn a travĂ©s de Twitter mientras navegamos.