Silverlight 4 Dica do dia #4 – Capturando as imagens da Webcam

By rdorta at junho 18, 2010 13:54
Filed Under: Arquitetura, Silverlight
&g

Olá,

Hoje vou mostrar para vocês como capturar as imagens camera do usuário no Silverlight.

Primeiro vamos ao XAML:

   1: <UserControl x:Class="SLWebCam.MainPage"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   5:     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   6:     mc:Ignorable="d"
   7:     d:DesignHeight="550"t; d:DesignWidth="700"
-CRLF-->
   8:     Loaded="UserControl_Loaded">
   9:  
  10:     <Grid x:Name="LayoutRoot" Background="White">
  11:         <StackPanel>
  12:             <Grid Width="640" Height="480">
  13:                 <Rectangle Name="Viewport" Stroke="Black" StrokeThickness="2" />
  14:             </Grid>
  15:             <Button Content="IniciarCaptura" HorizontalAlignment="Center" Click="Button_Click" />
  16:         </StackPanel>
  17:     </Grid>
  18: </UserControl>

 

Notem que temos neste XAML apenas 2 controles, 1 Rectangle, que servirá de ViewPort para a câmera ou seja, onde será exibida a imagem da camera e um obtão que irá disparar o início da captura.

Agora vamos ao código:

   1: using System.Windows;
   2: using System.Windows.Controls;
   3: using System.Windows.Media;
   4:  
   5: namespace SLWebCam
   6: {
   7:     public partial class MainPage : UserControl
   8:     {
   9:         CaptureSource cpsVideo;
  10:  
  11:         public MainPage()
  12:         {
  13:             InitializeComponent();
  14:         }
  15:  
  16:         private void UserControl_Loaded(object sender, RoutedEventArgs e)
  17:         {
  18:             // Instancia o objeto que manipula a WebCam
  19:             cpsVideo = new CaptureSource();
  20:             // Define qual webcam será o alvo do objeto, no caso a câmera padrão do Sistema
  21:             cpsVideo.VideoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
  22:  
  23:             //Cria o objeto que recebe os dados do video
  24:             VideoBrush vbsVideo = new VideoBrush();
  25:             vbsVideo.SetSource(cpsVideo);
  26:             // Preenche o retangulo com os dados capturados do video
  27:             Viewport.Fill = vbsVideo;
  28:         }
  29:  
  30:         private void Button_Click(object sender, RoutedEventArgs e)
  31:         {
  32:             // Efetua a requisição de acesso a WebCam
  33:             if (CaptureDeviceConfiguration.RequestDeviceAccess())
  34:             {
  35:                 cpsVideo.Start();
  36:             }
  37:         }
  38:     }
  39: }

Os grandes objetos que fazem a mágica são o CaptureSource, CaptureDeviceConfiguration e o VideoBrush.

Primeiro, instanciamos o CaptureSource e definimos qual camera ele irá utilizar atraves do CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice().

Depois criamos o VideoBrush e informamos a ele que sua fonte de imagens é o recém-criado CaptureSource.

Definimos que a saída do VideoBrush será o retangulo que criamos no XAML.

Pedimos a permissão do usuário para usar a câmera e pronto!!!

Muito easy esse tal de Silverlight.

Grande novidade do PDC - Silverlight 4

By rdorta at novembro 19, 2009 13:59
Filed Under: Arquitetura, Silverlight

Olá amigos,

Mais uma vez a Microsoft se supera no PDC 2009. Quem quiser um acompanhamento técnico legal do PDC 2009, sugiro o blog do Waldemir Cambiucci (ver no meu blogroll).

Agora falando sobre o que mais me interessa, Silverlight 4 vem aí e com features que eu sempre dizia que faltavam ao Silvelright quando comparado ao Flash. Ou seja… Flash Down…

Vamos direto ao link e depois vou comentar

http://silverlight.net/getstarted/silverlight-4-beta/

Primeiro ponto legal, a utilização do Visual Studio 2010.

Vamos aos Tools:

Silverlight 4 Beta Tools for Visual Studio 2010

Segundo ponto legal:

Blend for .Net 4

http://www.microsoft.com/downloads/details.aspx?FamilyID=6806e466-dd25-482b-a9b3-3f93d2599699&displaylang=en

A Documentação:

Online Silverlight 4 Beta Documentation

E agora minha visão sobre as novas features:

  • Impressão direta do Silverlight – YES WE CAN!!! muito bom!!!
  • Inclusão de um RichTextbox para exibição de HTML – Outra feature que fazia falta… Muito bom
  • DataGrid com Sort e Resize e Copy e Paste de linhas.
  • RIA Services
  • Melhorias no sistema de Out-of Browser.
  • Integração com periféricos: leitor de códigos de barra, webcam e outros..

Vou realziar alguns testes com a ferramenta em breve e posto mais comentários´

Até a próxima arqinovação.

Screen Casts sobre Prism

By rdorta at outubro 28, 2009 10:31
Filed Under: Arquitetura, Silverlight

No Channel 9 está disponível uma série de screencasts sobre Prism.

http://channel9.msdn.com/posts/mtaulty/Prism--Silverlight-Part-1-Taking-Sketched-Code-Towards-Unity/

image

Começa falando de diversas coisas legais de arquitetura como injeção de dependência com Unity e depois leva isso ao mundo do Silvelrlight utilizando Prism

image

 

Muito boa referencia para quem está começando a se aprofundar no mundo de Silverlight e WPF.

Até a próxima Arqinovação

Silverlight 4 is coming!!!

By rdorta at outubro 27, 2009 14:38
Filed Under: Silverlight

Desde o mês passado, a Microsoft tem lançado alguns spoilers referentes ao Silverlight4.

Dois deles me chamaram a atenção:

1)  A incorporação de direitos autorais sobre streaming. Ou seja, o suporte a direitos de transmissão de vídeo vai ser nativo. Isso é muito interessante, principalmente quando pensamos em um futuro próximo onde as locadoras começarão a trabalhar em ambiente virtual, fornecendo a locação de filmes via Streaming.

2)  Multicas de vídeos!!! Isso vai ser legal. Você poderá criar aplicações de conferências onde o streaming é enviado simultaneamente a diversos endereços.

Enfim, a Microsoft me parece estar atacando o mercado de RIA com soluções para uma nova geração de aplicativos baseados em vídeos.

A concorrencia com o Flash em sites de propaganda ainda me parece uma causa perdida, porem em aplicações orientadas a negócio corporativo o Silverlight deve virar preferência em breve.

Fonte: http://news.cnet.com/8301-13860_3-10346668-56.html

Catálogo BlackBox – ASP.NET MVC na veia.

By rdorta at outubro 27, 2009 14:04
Filed Under: Arquitetura, MVC

Mais um projeto de inovação da Makesys está no ar.

O Catálogo on-line da blackbox está no ar utilizando todo o requinte de aplicações desenvolvidas em ASP.NET MVC. Melhores práticas de SEO, Url Rewriting. Vale a pena conferir!!!

http://www.catalogoblackbox.com.br/

image

Sobre o projeto

Desenvolvido utilizando tecnologias de ponta como ASP.NET MVC e jquery, acompanhei este projeto desde o seu levantamento até o seu acabamento. Solução muito interessante e que em breve será evoluída para um e-commerce. Acompanhem :)

Até a próxima Arqinovação!!!

Toolkit para MVVM Com Silverlight.

By rdorta at outubro 05, 2009 11:47
Filed Under: Silverlight, Arquitetura

Muito bom!!!

Excelente toolkit para quem quer aprender MVVM e facilitar o desenvolvimento de aplicações WPF e Silverlight:

http://www.galasoft.ch/mvvm/getstarted/

Inclui código fonte.

[]´s

Até a próxima Arqinovação

Padrões de Arquitetura para Silverlight – MVVM (Model – View - ModelView)

By rdorta at setembro 17, 2009 12:11
Filed Under: Silverlight, Arquitetura

Neste post vou falar um pouco sobre o padrão MVVM e como utiliza-lo com Silverlight.

MVVM? É de comer?

rs. Não, não é nenhum xingamento e muito menos algo de comer.

MVVM ou Model View – ModelView é um design pattern que na minha opinião é o melhor patter para se desenhar aplicações em Silverlight.

Porque não utilizar outros Patterns mais conhecidos como MVC ou MVP?

No padrão MVP, o Presenter é responsável pela configuração e gerenciamento de estado de uma determinada view.

No padrão MVP o Controller tem um papel  parecido com o do Presenter.

Porém em Silverlight, a nossa camada de VIEW ou exibição contém um XAML que pode conter diversos Bindings, triggers, e gerenciamentos de estado, diferente das Views dos outros Patterns que são “burras” no Silverlight o XAML tem inteligência e vida própria.

Qual a solução?

O MVVM é um padrão derivado do MVP e do MVC, que foi disceminado pela comunidade de desenvolvimento WPF da Microsoft. A grande diferença é que apesar da ViewModel manipular e definir estados da View, a View pode declarativamente realizar bindings para propriedades da ModelView.

Separando melhor as camadas:

View = Composição de XAML e C# que manipula estados do XAML.
Model = Como as Models de MVC e MVP, define as chamadas de regras de negócio para exibição
ModelView = Camada que prepara os dados recebidos da Model para exibição no XAML.

Abaixo segue um gráfico para ilustrar o que disse acima:

fig01.gif

Hands On Mode ON

Para ilustrar melhor ainda o processo, vamos criar um MVVM Hello World em Silverlight:

No Visual Studio 2008 crie um novo projeto e permita que ele crie o projeto de testes:

image

Na sua Page.XAML, copie o código abaixo:

<UserControl x:Class="ExemploMVVM.Page"
    xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="400" Height="300">
    <Grid Background="White" ShowGridLines="True" x:Name="LayoutRoot">
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <TextBlock x:Name="txb1" Text="{Binding Nome}"></TextBlock>
        <TextBlock x:Name="txb2" Text="{Binding Idade}" Grid.Row="1" Grid.Column="0"></TextBlock>
        <TextBlock x:Name="txb3" Text="{Binding Sobrenome}" Grid.Row="0" Grid.Column="1"></TextBlock>
        <TextBlock x:Name="txb4" Text="{Binding Curso}" Grid.Row="1" Grid.Column="1"></TextBlock>
    </Grid>
</UserControl>

 

Agora vamos definir uma Classe do Tipo Aluno, para ser nosso objeto de transporte.

namespace ExemploMVVM
{
    public class Aluno
    {

        public Aluno(string pstrNome, string pstrSobrenome, int pintIdade, string pstrCurso)
        {
            this.Nome = pstrNome;
            this.Sobrenome = pstrSobrenome;
            this.Idade = pintIdade;
            this.Curso = pstrCurso;
        }

        private string gstrNome;
        private string gstrSobrenome;
        private int gintIdade;
        private string gstrCurso;

        public string Nome
        {
            get { return gstrNome; }
            set { gstrNome = value; }
        }
        public string Sobrenome
        {
            get { return gstrSobrenome; }
            set { gstrSobrenome = value; }
        }
        public int Idade
        {
            get { return gintIdade; }
            set { gintIdade = value; }
        }
        public string Curso
        {
            get { return gstrCurso; }
            set { gstrCurso = value; }
        }

    }
}

Agora vamos criar nossa View Model. Reparem que ela recebe uma interface IAlunoView e um Serviço para ser Rodado. Isso expande as possibilidade de utilização, sendo que você pode definir uma interface para serviços também, e dessa forma você pode popular n views com n serviços.

namespace ExemploMVVM
{
    public class AlunoViewModel
    {
        private IAlunoView view;  
        public string Nome{ get; set;}  
        public string Sobrenome{ get; set;}  
        public int Idade { get; set; }  
        public string Curso { get; set; }  
        private IAlunoService svcAluno;

        public AlunoViewModel(IAlunoView view, IAlunoService svcAluno)  
        {  
            this.view = view;
            this.svcAluno = svcAluno;  
            Initialize();   
        }  

        private void Initialize()  
        {
            var p = svcAluno.ObterAlunoCurso("Arquitetura");
            Nome = p.Nome;
            Sobrenome = p.Sobrenome;
            Idade = p.Idade;
            Curso = p.Curso;  
        }  

    }
}

E  por fim, o C# da nossa View:

namespace ExemploMVVM
{
    public partial class Page : UserControl, IAlunoView
    {

        private readonly AlunoViewModel vmm; 

        public Page()
        {
            InitializeComponent();
            vmm = new AlunoViewModel(this, new AlunoService());
            this.DataContext = vmm;  
        }
    }
}

Resumo da ópera

Resumindo, a grande vantagem de utilizar MVVM com Silverlight é que você pode aproveitar todo o poder de utlização de Bindings do XAML e ainda assim, criar um modelo de arquitetura onde você pode reutilizar a mesma regra de negócio(ViewModel e Model) com diversos designs diferentes(Views); No nosso caso, poderiamos tanto utilizar essa visualização dos quatro quadrados quanto fazer um CARD FLOW com os nomes e fotos dos alunos, quanto também criar uma visualização de grid com os dados dos alunos expostos.

Abaixo segue o código fonte que utilizei para esse exemplo.

ExemploMVVM.zip (782,28 kb) 

Abraços a todos e espero que possam usufluir desse modelo de arquitetura muito recomendado para aplicações em Silverlight.

Até a próxima Arqinovação!!!

 

Arquitetura de Aplicações Silverlight

By rdorta at setembro 17, 2009 11:05
Filed Under: Silverlight, Arquitetura

Ultimamente tenho visto diversas discussões sobre como criar aplicações Silverlight e como adequar essa tecnologias em algum design pattern comum no mercado como MVC, MVP, MVVM.

Vou tentar ilustrar nesse post como eu imagino uma aplicação Silverlight do ponto de vista de um arquiteto de software.

Web ou Client-side

Uma das coisas mais legais de Silverlight, é que apesar de ser uma tecnologia Web, ela roda em cima de um plugin que é instalado no computador do Cliente, portanto eu considero o paradigma de desenvolvimento Silverlight muito pais parecido com o desenvolvimento de aplicações Desktop do que com  o desenvolvimento de aplicações Web.

Sempre que criamos uma aplicação Silverlight no VS 2008 o próprio VS já se propõe a criar uma aplicação Web para que você possa testar sua aplicação.

Isso está mais do que correto, você pode estruturar seu desenvolvimento em dois lados:

image

Você deve sempre pensar que o seu Client de Silverlight é REALMENTE uma aplicação Client, portanto, você pode desenvolver utilizando qualquer pattern interessante ao momento, como Singleton, Abstract Factory e Observer(esse muito recomendado).

Já seu lado Server-Side, ou seja sua aplicação Web, você também pode estruturar utilizando as melhores práticas voltadas para web, como a criação de serviços ou handlers.

Nos meus próximos posts vou tentar abordar como utilizar as melhores práticas de arquitetura com o Silverlight e em quais cenários eles se aplicam.

Até a próxima Arqinovação!!!

Sobre mim

Ricardo Dorta

Ricardo Dorta

Arquiteto de sistemas da Makesys, atua na área de desenvolvimento de aplicações .NET há 5 anos.
MCP, MCAD e MCSD.