Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Cursos Online iMasters
Foto:

[Resolvido] Rotacionar imagem sem perder qualidade?

  • Por favor, faça o login para responder
9 respostas neste tópico

#1 Luiz Henrique

Luiz Henrique

    Compartilhando Informações.

  • Membros
  • 2.364 posts

Postado 15 outubro 2009 - 22:12

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.
  • 0

#2 Thiago de Oliveira Cruz

Thiago de Oliveira Cruz

    Web Developer

  • Membros
  • 4.799 posts

Postado 16 outubro 2009 - 11:54

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

#3 Matheus Brito

Matheus Brito

    Estudando...

  • Membros
  • 3.503 posts

Postado 16 outubro 2009 - 16:13

ir na biblioteca e aumentar a qualidade dela realmente da uma ajuda.
Abs
  • 0

#4 Luiz Henrique

Luiz Henrique

    Compartilhando Informações.

  • Membros
  • 2.364 posts

Postado 16 outubro 2009 - 23:25

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.
  • 0

#5 Thiago de Oliveira Cruz

Thiago de Oliveira Cruz

    Web Developer

  • Membros
  • 4.799 posts

Postado 16 outubro 2009 - 23:41

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

#6 Matheus Brito

Matheus Brito

    Estudando...

  • Membros
  • 3.503 posts

Postado 17 outubro 2009 - 18:40

O melhor jeito é trazer no angulo já.
Abs
  • 0

#7 carneirinho

carneirinho
  • Moderadores
  • 2.892 posts

Postado 19 outubro 2009 - 11:03

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

#8 Luiz Henrique

Luiz Henrique

    Compartilhando Informações.

  • Membros
  • 2.364 posts

Postado 21 outubro 2009 - 21:52

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


  • 0

#9 carneirinho

carneirinho
  • Moderadores
  • 2.892 posts

Postado 23 outubro 2009 - 11:05

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

#10 Luiz Henrique

Luiz Henrique

    Compartilhando Informações.

  • Membros
  • 2.364 posts

Postado 23 outubro 2009 - 22:04

Olá rapaz,

Bom, o fundo passou de branco para preto, mas tranquilo o importante era saber se é possível, agora eu me viro, obrigado.
  • 0




Publicidade

/ins>