Ir para conteúdo

Arquivado

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

Luiz Henrique

[Resolvido] Rotacionar imagem sem perder qualidade?

Recommended Posts

Olá pessoas,

 

Preciso deixar imagens com algum ângulo de rotação ex img._rotation = 20; porém como já era de se esperar a imagem fica serrilhada, já tentei usar

img._quality = "best";
img.forceSmoothing = true;
mas não adianta, a questão é, tem como consertar isto ou a imagem já tem que vir para o flash no ângulo desejado?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom as suas opções são... vir já rotacionada realmente ajuda.

Tbm marcar na biblioteca na imagem esse smothing que pode ajudar.

 

Mudar tbm os dados do player do flash para rodar imagens com 100 de resolução... mas isso vai fazer ficar mto grande seu arquivo.

 

Trabalhar com imagens jpg, png, gif etc... no flash tem esse problema que não é vetorial e sim bitmap e acaba causando esse desvio chato de ficar serrilhado.

 

O que pode fazer é tentar converter a imagem para bitmap e trabalhar com ela "semi" vetorial... assim você vai conseguir uma melhor resolução...

 

 

Espero ter ajudado

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Obrigado aos dois mas eu queria saber se tinha alguma forma por action script, não tem como eu ir na biblioteca arrumar a imagem ela é dinâmica um xml vai fornecer as imagens, as restantes das opções eu já utilizo, e como eu imaginava vou ter que levar a imagem já no ângulo certo.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha por AS você pode aplicar blur...

Pode aplicar o smothing como você mesmo disse...

 

Pode inclusive transformar ela em bitmapdata e ai trabalhar com ela dessa maneira.

 

Pode aplicar n filters que existem aplicaveis via flash.

 

Mas não sei se vai ajudar muito :(

Pois imagem realmente é algo que a adobe deveria trabalhar melhor com flash

É algo que a galera reclama por demais.

 

Mas é também porque não existe nenhum formato existente para animação né?

Apenas o vetorial... e mesmo assim dependendo da imagem vetorizada não fica legal.

 

Então ficam ai as dicas

Se quiser tenta usar o blur é uma boa pra melhorar um poquinho a imagem

Apesar de que ela vai ficar mais esfumaçada

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre tive esse problema principalmente para trabalhar com imagens externas, dai fiz uma classe para resolver, uso até hoje e não tenho mais problemas ao mudar scale ou rotation das imagens, veja se resolve pra você:

 

Arquivo ImageLoader.as


import flash.display.BitmapData;
class ImageLoader extends MovieClip
{
	private var mc:MovieClip;
	private var bmd:BitmapData;
	private var _loaded:Number;
	private var _total:Number;
	public var url:String;
	
	function ImageLoader () { }
	function loadImage (url, target) : Void
	{
		this.mc = target;
		this.mc.createEmptyMovieClip("loader", this.mc.getNextHighestDepth());
		this.url = url;
		this.mc.loader.loadMovie(url);
		this.mc.onEnterFrame = function  () 
		{
			this._loaded = this.loader.getBytesLoaded();
			this._total = this.loader.getBytesTotal();
			this.pct = Math.floor(this._loaded / this._total * 100);
			if (this.pct > 99)
			{
				this.bmd = new BitmapData (this._width, this._height);
				this.bmd.draw(this.loader);
				this.loader.attachBitmap(this.bmd, 1, "auto", true);
				delete this.onEnterFrame;
			}
		}
	}
	function redraw (mc) : Void
	{
		this.mc.bmd = new BitmapData (this.mc._width, this.mc._height);
		this.mc.bmd.draw(this.mc.loader);
		this.mc.loader.attachBitmap(this.mc.bmd, 1, "auto", true);
	}
}

Para usar:

 

var mc:MovieClip = this.createEmptyMovieClip("loader", 1);
var imgLoader:ImageLoader = new ImageLoader();
imgLoader.loadImage("minha_imagem.jpg", loader);

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá carneirinho,

 

Desculpe a demora mas deu pau aqui. Então, legal sua class a imagem fica perfeita porém na hora que rotaciono a imagem junto com a mesma aparece um quadro branco, como se eu levasse uma foto de no photoshop por exemplo e desse um canvas size no palco, ou seja eu aumento o espaço útil do doc mas não mexo na foto e o engraçado é que isto é proporcional a rotação que dou, ex. se aplico _rotation = 50 ele aumenta 50px in left e

 

50px in bottom, isto é normal? Se for já não rola legal aqui porque vai ser um monte de imagens uma em cima da outra e se tiver este fundo branco vai atrapalhar.

 

Aguardo.

Obrigado.

 

 

 

Sempre tive esse problema principalmente para trabalhar com imagens externas, dai fiz uma classe para resolver, uso até hoje e não tenho mais problemas ao mudar scale ou rotation das imagens, veja se resolve pra você:

 

Arquivo ImageLoader.as


import flash.display.BitmapData;
class ImageLoader extends MovieClip
{
	private var mc:MovieClip;
	private var bmd:BitmapData;
	private var _loaded:Number;
	private var _total:Number;
	public var url:String;
	
	function ImageLoader () { }
	function loadImage (url, target) : Void
	{
		this.mc = target;
		this.mc.createEmptyMovieClip("loader", this.mc.getNextHighestDepth());
		this.url = url;
		this.mc.loader.loadMovie(url);
		this.mc.onEnterFrame = function  () 
		{
			this._loaded = this.loader.getBytesLoaded();
			this._total = this.loader.getBytesTotal();
			this.pct = Math.floor(this._loaded / this._total * 100);
			if (this.pct > 99)
			{
				this.bmd = new BitmapData (this._width, this._height);
				this.bmd.draw(this.loader);
				this.loader.attachBitmap(this.bmd, 1, "auto", true);
				delete this.onEnterFrame;
			}
		}
	}
	function redraw (mc) : Void
	{
		this.mc.bmd = new BitmapData (this.mc._width, this.mc._height);
		this.mc.bmd.draw(this.mc.loader);
		this.mc.loader.attachBitmap(this.mc.bmd, 1, "auto", true);
	}
}

Para usar:

 

var mc:MovieClip = this.createEmptyMovieClip("loader", 1);
var imgLoader:ImageLoader = new ImageLoader();
imgLoader.loadImage("minha_imagem.jpg", loader);

abraço

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra resolver o problema do branco, é só você setar o valor de transparente pra true na formação da classe Bitmap, ficaria assim:

 

import flash.display.BitmapData;
class ImageLoader extends MovieClip
{
        private var mc:MovieClip;
        private var bmd:BitmapData;
        private var _loaded:Number;
        private var _total:Number;
        public var url:String;
		private var transparente:Boolean = true;
		private var corFundo:Number = 0x00FFFFFF;
        
        function ImageLoader () { }
        function loadImage (url, target) : Void
        {
                this.mc = target;
                this.mc.createEmptyMovieClip("loader", this.mc.getNextHighestDepth());
                this.url = url;
                this.mc.loader.loadMovie(url);
                this.mc.onEnterFrame = function  () 
                {
                        this._loaded = this.loader.getBytesLoaded();
                        this._total = this.loader.getBytesTotal();
                        this.pct = Math.floor(this._loaded / this._total * 100);
                        if (this.pct > 99)
                        {
                                this.bmd = new BitmapData (this._width, this._height, this.transparente, this.corFundo);
                                this.bmd.draw(this.loader);
                                this.loader.attachBitmap(this.bmd, 1, "auto", true);
                                delete this.onEnterFrame;
                        }
                }
        }
        function redraw (mc) : Void
        {
                this.mc.bmd = new BitmapData (this.mc._width, this.mc._height);
                this.mc.bmd.draw(this.mc.loader);
                this.mc.loader.attachBitmap(this.mc.bmd, 1, "auto", true);
        }
}

Agora para o problema de rotação, conforme você vai girando, ele vai aumentando o espaço ocupado na tela, portanto aumentando a largura e altura dele, o que eu posso sugerir é de você colocar essa imagem dentro de um movieclip e centraliza-la dentro do movieclip pra aplicar o rotation, e calcular largura e altura dentro desse movieclip, isso deve funcionar.

 

abraço,

 

Carneirinho

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.