Archive for August, 2009

Simples utilização de WritableBitmap

Tuesday, August 18th, 2009
Autor: Tiago Andrade e Silva


 

O Silverlight 3 introduziu o WritableBitmap que nos permite manipular os pixels directamente.

Eis um pequeno exemplo de utilização. Neste exemplo simula-se a chuva de uma televisão quando não tem emissão. Para o efeito preenche-se cada pixel da imagem com uma cor aleatória. A imagem está constantemente a ser redesenhada de modo a dar a noção da “chuva”.

 

        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);
        }

Após esta inicialização e na entrada em cada frame redesenha-se a “chuva” ao nível do pixel:


        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();
        }

Utilizando o seguinte xaml com uma imagem de uma TV para dar enquadramento:

    <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>

O resultado é:

WritableBitmapChuva

Marcas Technorati:

 

Fazer download do código fonte desta aplicação.

Ver Demo

Se agora brincarmos com a chuva através da posição do rato, conseguimos criar a noção de interferências feitas pelo rato. Para isso é preciso, para além do código abaixo, adicionar o evento para apanhar o movimento do rato, criar uma variável que contem a última posição do rato e actualiza-la cada vez que o rato mexe.

 

        //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();
        }

Ver resultado

Forms Authentication em 15 minutos

Friday, August 7th, 2009
Autor: Nuno Costa


Se quisermos ter um site ou parte dele accessivel apenas por utilizadores registados esta é uma forma rápida de implementar forms authentication.

 

Criar uma página para autenticação e adicionar um controlo login

logincontrol thumb Forms Authentication em 15 minutos

No evento Authenticate do controlo colocar o seguinte código :

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    if (FormsAuthentication.Authenticate(Login1.UserName, Login1.Password))
    {
        FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
    }
    else
    {
        Login1.FailureText = “username/password inválidos”;
    }
}

Agora só é preciso configurar o web.config

<authentication mode=”Forms” >
      <forms defaultUrl=”Default.aspx” loginUrl=”Login.aspx” name=”authCookieName” >
        <credentials passwordFormat=”Clear”>
          <user name=”admin” password=”passwordAdmin”/>
        </credentials>
      </forms>
    </authentication>
    <authorization>
      <deny users=”?”/>
    </authorization>

Automaticamente o input do utilizador vai ser validado contra as credenciais presentes no web.config.

ASP.NET Textbox TextMode = Password

Tuesday, August 4th, 2009
Autor: nuno.lourenco


O modo de afectar o conteúdo de o controlo ASP.NET Textbox, em que esteja definido o modo de texto, do input, como Password (TextMode = Password), deverá ser diferente do habitual:

 1: password.Text = "password";

Mas sim, deverá ser:

 1: password.Attributes.Add("value", "password");

Happy codding :)


Better Tag Cloud