Wednesday, September 09, 2009

BitmapEffects with WriteableBitmap

Folowing this post, here is another set of visual effects applied to a image. The effects are enabled by using the WriteableBitmap class of Silverlight 3.

Running Demo. Download of the source code.

Monday, September 07, 2009

“The world in 2015” – A world of content

Article writen for the newspaper Semanário Económico – outlook - (5 de Setembro de 2009) for the topic "The World in 2015". Article in Portuguese:

“Daqui a 6 anos estaremos em plena revolução ao nível de conteúdos, desde a produção e distribuição até ao seu consumo. Os conteúdos serão uma ‘commodity’, forçada pela sua desmaterialização e facilidade de acesso através das redes digitais, e a experiência de consumo será a componente fundamental.

A produção de conteúdos irá mudar. Aliás, está progressivamente a deixar de estar exclusivamente nas mãos das grandes editoras ou produtoras. Cada vez mais, qualquer pessoa pode ser o autor de um livro, de um filme ou de uma estação de rádio e facilmente disponibilizar esse conteúdo a quem quer que esteja interessado. As melhores bandas, os melhores escritores e produtores serão escolhidos directamente por nós, sem a interferência de grandes campanhas de marketing.

Mas o consumo de conteúdos também está a mudar. Estamos num ponto de inflexão onde deixaremos de consumir o que outros decidem para passarmos a ser nós próprios a decidir que conteúdos vamos consumir, quando e onde. Eu serei o editor da minha revista, as rádios tocarão a música que eu gosto, as televisões emitirão os meus programas favoritos e os filmes, mesmo ainda não os tendo visto, serão os que têm a maior probabilidade de eu gostar.

Já começamos a assistir a um movimento de convergência digital onde os formatos físicos estão a ser substituídos pelos digitais. As velhas fotografias são substituídas pelos álbuns no Flickr, os vinis e cd’s pelos mp3 no iTunes, os filmes de 8mm e vhs de família pelos filmes no Youtube, já para não falar das tradicionais cartas que foram substituídas pelo email e que em 2015 serão substituídos por aplicações mais interactivas como o Google Wave. Em 2015 haverá muito poucos formatos físicos. Não é a disquete, que essa já nem os jovens actuais sabem o que é. Refiro-me aos cds, dvds e eventualmente os livros tal como os conhecemos. Tudo passará a estar disponível na rede e através dela, a qualquer hora, a partir de qualquer sítio e em qualquer dispositivo. Porque razão é que eu tenho de pagar novamente os direitos de autor de um CD musical se o formato físico comprado se estragar e eu pretender um novo? Qual é a loja que recebe o meu CD antigo e me dá um novo cobrando apenas o custo do formato físico? A importância passa para os direitos de autor e deixa de ser a distribuição e produção.

Será possível assistir a um filme ao mesmo tempo que os meus amigos, comentado cada uma das cenas à medida que elas vão acontecendo estando, no entanto, cada um na sala de sua casa. A proximidade de comunicação vai ser muito maior apesar de estarmos fisicamente distantes. Os dispositivos estarão interligados na disponibilização da melhor experiência de consumo. Poderei estar a assistir a um concerto da minha banda preferida na televisão de casa, e ao ter de me deslocar para o carro a música segue sem interrupções para o meu ipod e passa do mesmo modo para a aparelhagem do carro sem qualquer corte de fluidez musical na troca dos dispositivos emissores.

Não acontecerá apenas uma mudança tecnológica mas sim industrial, cultural e social. Tal como dizia Charles Darwin, não são as espécies mais fortes ou mais inteligentes que sobrevivem mas sim aquela que tem uma maior capacidade de adaptação. As grandes empresas de media que não demonstrem capacidades de se adaptar desaparecerão do mercado. A batalha contra a troca ilegal de ficheiros na internet será ganha pelos prevaricadores e as empresas passarão a adaptar a sua oferta, não ao conteúdo em si, mas sim aos serviços e experiências dados para além do conteúdo. Todos temos a noção que, nos cinemas, o que dá lucro são as pipocas e não o filme em si!

Assim sendo, o grande dilema em 2015 será como é que os produtores de conteúdos irão ter dividendos para continuar a produzir. Como é que se evita sermos inundados por obras de amadores e não chegarmos a ver obras de profissionais pois não conseguem obter o sustento necessário? A experiência de consumo é a resposta. Para a indústria musical serão os concertos a dar essa experiência e a gerar retorno. Mais complicado será para os escritores ou produtores de filmes que terão que utilizar meios interactivos muito mais complexos. Mas isso é outra história…”

SemanarioEconomico_outlook_05.09.2009.mundo2015_tas

Wednesday, September 02, 2009

Sample WritableBitmap

the image to a random color. The image is being redraw regularly so it shows a notion of “rain”. Here is the initialization:

        private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{

Screen.Width
= ScreenWidth;
Screen.Height
= ScreenHeight;

//Criaco do object writablebitmap com o tamanho indicado.
bitmap = new WriteableBitmap(ScreenWidth, ScreenHeight);
//Indicao de qual o elemento que ira fazer a visualizao do writable bitmap.
Screen.Source = bitmap;

//registar o evento para fazer o render regular
CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
}


After initilization and on each frame we redraw the pixels randomly:

void CompositionTarget_Rendering(object sender, EventArgs e)
{
var index
= MaxScreen;

//Pintar cada pixel
while (--index > -1)
{
//cor aleatoria para cada pixel
var color = System.Convert.ToInt32(rnd.Next(0xffffff));
bitmap.Pixels[index]
= color > 0xffffff ? 0xffffff : color;
}

//força o bitmap a redesenhar
bitmap.Invalidate();
}


Regarding the XAML we use an image of a TV to give a more realistic effect:



    <Grid x:Name="LayoutRoot" Background="#FFFFFFFF">
<Image x:Name="tv" Source="tv.jpg" Margin="68,29.807,72,53.193" d:LayoutOverrides="Width, Height"/>
<Image x:Name="Screen" OpacityMask="{x:Null}" Margin="99,57,100,0" Opacity="1" VerticalAlignment="Top" Height="216" Width="390"/>
</Grid>


The result is:



clip_image002


You can download the source code here and the demo can be seen here.

We can also play with the mouse movement and make it create interferences on the TV. We need to capture the mouse movement event and act accordingly:

//Repaint the screen regularly
void CompositionTarget_Rendering(object sender, EventArgs e)
{
var index
= MaxScreen;

//Paint each bitmap pixel.
while (--index > -1)
{
if (index % (mouseLastPos.X/2 + mouseLastPos.Y/2)+rnd.Next(20) < 15)
bitmap.Pixels[index]
= 0xffffff;
//bitmap.Pixels[index] = Convert.ToInt32(mouseLastPos.X * mouseLastPos.Y+5000);
else
{
//Random color for each pixel.
var color = System.Convert.ToInt32(rnd.Next(0xffffff));
bitmap.Pixels[index]
= color > 0xffffff ? 0xffffff : color;
}
}

//force bitmap repaint
bitmap.Invalidate();
}

Final result can be seen here.

Microsoft Surface demos

I recently developed a series of tests and demos os Microsoft Surface to some clients and journalists. As a result there was some magazine coverage: Pc Guia, Bit (pg1 e pg2) and also a TV show "episódio 4 da Exame Informática TV" that was recorded at Fullsix and brodcasted by Sic Notícias.


The prototypes that I developed can be seen here. One of these prototypes was also showed at the keynote of Microsoft DevDays 09.