Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

No artigo anterior já havia demonstrado o poder do Flex, criando um FLV. Neste agora, em um pequeno exemplo vou demonstrar como converter uma Imagem PNG em um SWF e salvar em sua maquina.

Quando clicar no Botão Salvar será executado a função gravarHandler() que captura um Snapshot do vídeo com a classe ImageSnapshot. Este Snapshot é convertido para PNG com a classe PNGEncoder e utilizando a classe Loader é carregado estes Bytes em um formato já mais parecido com um SWF. Então não precisaremos fazer muitas alterações no formato resultante.

Os bites resultante da classe Loader são separados em duas partes. Uma primeira chamada de header contendo os 8 primeiros bytes do PNG. Substituo a primeira TAG por ‘F’. O restante do PNG eu comprimo e retorno a montar os 8 primeiros caracteres com os demais caracteres comprimidos.

protected function gravarHandler():void
{
    // captura um print da webcam
    var bdata:BitmapData = ImageSnapshot.captureBitmapData(camera)

    // converte para PNG
    var imagem:ByteArray = ( new PNGEncoder()).encode( bdata );

    // Usa a clase Load para carregar a imagem
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener( Event.COMPLETE, loaderCompleteHandler );
    loader.loadBytes( imagem );
}

private function loaderCompleteHandler( event:Event ):void
{
    var loaderinfo:ByteArray = ( event.target as LoaderInfo ).bytes

    // cria o bitearray do cabeçalho
    var header:ByteArray = new ByteArray();
    header.endian = Endian.LITTLE_ENDIAN;
    header.writeBytes( loaderinfo, 0, 8 );
    header[0] = 0x43; // 'C' letter;
    header.position = 0;
    // cria o bitearray do corpo
    var corpo:ByteArray = new ByteArray();
    corpo.endian = Endian.LITTLE_ENDIAN;
    corpo.writeBytes( loaderinfo, 8 );
    corpo.position = 0;
    corpo.compress();
    corpo.position = 0;		 

    // criando o SWF
    var swf:ByteArray = new ByteArray();
    swf.writeBytes( header );
    swf.writeBytes( corpo );

    var file:FileReference = new FileReference();
	file.save( swf, "imagem.swf" );
}

Veja abaixo funcionado.

Fonte disponível aqui, e se quiser mais detalhes, comente.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

3 comentários

Deixe uma resposta

  1. Olá Eduardo
    Estou iniciando em Flex e gostaria que me ajudasse por favor.
    Criei uma aplicação simples no Flex, e coloquei um  "banner.swf " usando o SWFLoader .. td ok quando compilo e visualiso diretamente do Adobe Flex.
    Mas quando pego os arquivos para hospedar no meu site, nem o banner.swf e nenhum swf esta funcionando.
    As imagens carregam normalmente, mas os swfs não
    Não achei nada na internet que me ajudasse a resolver isto.
    Obrigado desde ja.

     
  2. @Xará estas usando mesmo domínio para isso? O caminho esta relativo ou absoluto? Verifique se não estas usando caminho do tipo file://c:/... para definir o caminho da aplicação.

     
  3. Show de bola Eduardo!

    Parabéns pelo artigo!

    Abs.

    Robson Fernandes