Converter imagem em SWF no Flash

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.

Fique por dentro de nossas novidades, ideias e atualizações