Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lendadomato

[Resolvido] Duplicar imagem carregada localmente com FileReferenc

Recommended Posts

Pessoal,

 

to precisando da força de vcs,

preciso duplicar uma imagem carregada em um mc localmanete, já

tentei vários métodos e sem sucesso pois sou iniciante

na linguagem, consegui duplicar o mc no stage mas a imagem não

vem duplicada, segue a parte que consegui fazer:

 

recebo a imagem no mc_frente que tem um Linkage chamado "duplicavel"

 

mc_frente.addChild(loader);

var duplica:Object = getDefinitionByName("duplicavel") as Class;
//cria um movieclip (uma nova instancia do movieclip original)
var mc:MovieClip = new duplica();
//e manda ele pro stage
addChild (mc);

mc.x = 50;
mc.y = 200;
}

 

dessa forma se duplica o mc_frente mas sem a imagem dentro, lembrando

que os dois mcs serão manipulados com o mesmo componente Slider.

 

Desde já agradeço a ajuda de todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, o Flash não duplica mais. Já vi até algumas gambiarras aí pela net, mas não tem jeito. O ideal é você habilitar o linkage de um objeto gráfico na biblioteca e, então, criar quantas instâncias forem necessárias.

 

Acrescentando, você consegue duplicar um Bitmap criando um novo Bitmap que utiliza o mesmo BitmapData do anterior:

var imagem:Bitmap = new Bitmap(new Imagem());
var clone:Bitmap = new Bitmap(imagem.bitmapData);

addChild(clone);

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo BrunoBispo,

 

não consegui fazer conforme você instruiu, segue o fonte completo:

import flash.events.MouseEvent;
import flash.net.FileReference;
import flash.net.FileFilter;
import flash.utils.ByteArray;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.display.MovieClip;
import fl.controls.ProgressBarMode;
import flash.display.DisplayObject;
import flash.geom.Rectangle;
import flash.system.Capabilities;
import com.adobe.images.JPGEncoder;



var fileRef:FileReference;


//botão Configurar  manipular a navegação
browseButton.buttonMode=true;
browseButton.mouseChildren=false;
browseButton.addEventListener(MouseEvent.CLICK, onBrowseButtonClicked);
progressBar.visible=false;





// Essa função é chamada quando o botão Navegar é clicado.
function onBrowseButtonClicked(event:MouseEvent):void
{
trace("onBrowse");
fileRef=new FileReference();
fileRef.addEventListener(Event.SELECT, onFileSelected);
var swfTypeFilter:FileFilter = new FileFilter("SWF/JPG/PNG Files","*.jpeg; *.jpg;*.gif;*.png");
var allTypeFilter:FileFilter = new FileFilter("All Files (*.*)","*.*");
fileRef.browse([swfTypeFilter, allTypeFilter]);


}

// Essa função é chamado depois que o usuário selecionou um arquivo na janela do navegador de arquivos.
function onFileSelected(event:Event):void
{
trace("Arquivo Selecionado");
// Este callback será chamado quando o arquivo é carregado e pronto para uso
fileRef.addEventListener(Event.COMPLETE, onFileLoaded);


// Este callback será chamado se houver erro durante o upload
fileRef.addEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);


// Callback opcional para acompanhar o progresso de upload
fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress);


// Informa o FileReference para carregar o arquivo
fileRef.load(); 

// Mostrar barra de progresso
progressBar.visible=true;
progressBar.mode=ProgressBarMode.MANUAL;
progressBar.minimum=0;
progressBar.maximum=100;

browseButton.visible=false;

}

// Essa função é chamada para nos informar sobre os progressos do upload
function onProgress(event:ProgressEvent):void
{
var percentLoaded:Number=event.bytesLoaded/event.bytesTotal*100;
trace("Carregado: "+percentLoaded+"%");
progressBar.setProgress(percentLoaded, 100);
}

// Essa função é chamada depois que o arquivo tenha sido carregado.
function onFileLoaded(event:Event):void
{
var fileReference:FileReference=event.target as FileReference;

// Estes passos indicados a seguir são para passar os dados como DisplayObject 
// Estas etapas são específicas para este exemplo.
var data:ByteArray=fileReference["data"];
trace("Arquivo carregado");

fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);	
browseButton.visible=true;

var movieClipLoader:Loader=new Loader();
movieClipLoader.loadBytes(data);
movieClipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMovieClipLoaderComplete);

}

function onFileLoadError(event:Event):void
{
// Ocultar barra de progresso
progressBar.visible=true;
browseButton.visible=true;
fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);

trace("Arquivo deu erro.");
}   

// Esta função abaixo é específica para esse exemplo.
// Ele faz o processamento necessário para exibir o swf / png / jpeg arquivo que acabamos carregado.
function onMovieClipLoaderComplete(event:Event):void
{
// Ocultar barra de progresso
progressBar.visible=false;
var imagem:DisplayObject=event.target.content;
var loader:Loader=event.target.loader as Loader;



// Ajustar para estágio

   trace("Largura da Imagem Carregada.width = "+imagem.width);
trace("Altura da Imagem Carregada = "+imagem.height);
imagem.scaleX=loader.width/imagem.width;
imagem.scaleY=loader.height/imagem.height;
trace("Posição da Imagem.scaleX = "+imagem.scaleX);
trace("Posição da Imagem.scaleY = "+imagem.scaleY);
trace("Largura do Palco = "+this.stage.width);

mc_frente.addChild(loader);

Compartilhar este post


Link para o post
Compartilhar em outros sites
function onMovieClipLoaderComplete(event:Event):void
{
var copia:Bitmap = new Bitmap(Bitmap(Loader(event.currentTarget.loader).content).bitmapData);
addChild(copia);

// Ocultar barra de progresso
progressBar.visible=false;
var imagem:DisplayObject=event.target.content;
var loader:Loader=event.target.loader as Loader;

// Ajustar para estágio
trace("Largura da Imagem Carregada.width = "+imagem.width);
trace("Altura da Imagem Carregada = "+imagem.height);
imagem.scaleX=loader.width/imagem.width;
imagem.scaleY=loader.height/imagem.height;
trace("Posição da Imagem.scaleX = "+imagem.scaleX);
trace("Posição da Imagem.scaleY = "+imagem.scaleY);
trace("Largura do Palco = "+this.stage.width);

mc_frente.addChild(loader);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo bem basicão:

import flash.display.BitmapData;

var btmp:Bitmap;
var bmd:BitmapData;

var url_urlr:URLRequest = new URLRequest("arq.ext");

var ld:Loader = new Loader();
ld.contentLoaderInfo.addEventListener(Event.COMPLETE,carregou);
ld.load(url_urlr);

addChild(ld);

function carregou(e:Event) {

bmd = new BitmapData(ld.width, ld.height, false, 0x000000FF);
bmd.draw(ld);
btmp = new Bitmap(bmd);

btmp.y = ld.y+ld.height+10;
btmp.x = ld.x;

addChild(btmp);

};

Compartilhar este post


Link para o post
Compartilhar em outros sites

function onMovieClipLoaderComplete(event:Event):void
{
var copia:Bitmap = new Bitmap(Bitmap(Loader(event.currentTarget).content).bitmapData);
addChild(copia);

// Ocultar barra de progresso
progressBar.visible=false;
var imagem:DisplayObject=event.target.content;
var loader:Loader=event.target.loader as Loader;

// Ajustar para estágio
trace("Largura da Imagem Carregada.width = "+imagem.width);
trace("Altura da Imagem Carregada = "+imagem.height);
imagem.scaleX=loader.width/imagem.width;
imagem.scaleY=loader.height/imagem.height;
trace("Posição da Imagem.scaleX = "+imagem.scaleX);
trace("Posição da Imagem.scaleY = "+imagem.scaleY);
trace("Largura do Palco = "+this.stage.width);

mc_frente.addChild(loader);
}

 

 

amigo BrunoBispo,

 

deu o seguinte erro:

 

TypeError: Error #1034: Falha de coerção de tipo: não é possível converter flash.display::LoaderInfo@f656701 em flash.display.Loader.

at upload_esquerda2_fla::MainTimeline/onMovieClipLoaderComplete()

 

vou bater cabeça por aqui pra ver o seu raciocínio, eu

acho q estamos no caminho certo!

 

Um exemplo bem basicão:

import flash.display.BitmapData;

var btmp:Bitmap;
var bmd:BitmapData;

var url_urlr:URLRequest = new URLRequest("arq.ext");

var ld:Loader = new Loader();
ld.contentLoaderInfo.addEventListener(Event.COMPLETE,carregou);
ld.load(url_urlr);

addChild(ld);

function carregou(e:Event) {

bmd = new BitmapData(ld.width, ld.height, false, 0x000000FF);
bmd.draw(ld);
btmp = new Bitmap(bmd);

btmp.y = ld.y+ld.height+10;
btmp.x = ld.x;

addChild(btmp);

};

 

amigo Roger,

 

o sistema q estou usando não usa url, o load da imagem é feito

localmente, eu tenho um sistema em AS2 que funciona a duplicidade

do mc mas só porque preciso usar um componente Slider para aumentar

a imagem eu terei q trocar.

 

se alguém tiver um Slider que aumente a imagem que funcione no AS2 já me serve.

pelo AS3.

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo Roger,

 

o sistema q estou usando não usa url, o load da imagem é feito

localmente...

var btmp:Bitmap;
var bmd:BitmapData;

function onMovieClipLoaderComplete(event:Event):void
{
       progressBar.visible=false;
       var imagem:DisplayObject=event.target.content;
       var loader:Loader=event.target.loader as Loader;

bmd = new BitmapData(loader.width, loader.height, false, 0x000000FF);
       bmd.draw(loader);
       btmp = new Bitmap(bmd);

       btmp.y = mc_frente.y+mc_frente.height+10;
       btmp.x = mc_frente.x;

       addChild(btmp);

       // Ajustar para estágio
       trace("Largura da Imagem Carregada.width = "+imagem.width);
       trace("Altura da Imagem Carregada = "+imagem.height);
       imagem.scaleX=loader.width/imagem.width;
       imagem.scaleY=loader.height/imagem.height;
       trace("Posição da Imagem.scaleX = "+imagem.scaleX);
       trace("Posição da Imagem.scaleY = "+imagem.scaleY);
       trace("Largura do Palco = "+this.stage.width);

       mc_frente.addChild(loader);
}

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.