Comunidad de diseño web y desarrollo en internet online

Cargar imagen como bitmap no como clip de pelicula

Citar            
MensajeEscrito el 27 Jul 2007 10:07 am
Hola a todos/as,

Soy nuevo en este foro, asi que os envio un saludo a todos los integrantes y espero participar activamente en el. En la medida de mis excasos conocimientos, si puedo ayudar lo haré con mucho gusto.

Tengo una duda a la que no encuentro solución. Voy a intentar explicarlo lo mejor posible para ver si me pueden ayudar.

En Flash yo puedo importar un bitmap a la biblioteca y darle la caracteristica de poder ser linkado como exportable en actionscript, asi como asignarle un identificador.
Pues lo que me gustaria, es hacer esto mismo mediante programación, importando un bitmap externo que se encuentra en una carpeta.

No puedo importarlo creando un movieclip vacio con createEmptyMovieClip y usando loadMovie ya que necesito el bitmap porque uso copyPixels.

Toda la información que encuentro es para importar una imagen en un clip de pelicula, pero como ya he dicho necesito el bitmap (la imagen) y ademas que sea exportable y asignarle un identificador en tiempo de ejecución, todo desde código actionscript.

Espero que me puedan ayudar, ya que me he quedado atascado en este punto.

Muchas gracias.

Por navegante_ante

3 de clabLevel



Genero:Masculino  

España

firefox
Citar            
MensajeEscrito el 27 Jul 2007 02:19 pm
De hecho tienes que hacerlo así, lo cargas con MovieClipLoader, que es mas fácil y rápido que hacerlo con loadMovie, y después creas tu objeto tipo bitmapData y le haces un draw, si quieres puedes destruir el movieclip.
Un ejemplo:

Código :

import flash.display.BitmapData;
import flash.geom.*;
import flash.filters.*;
var bmp:BitmapData;
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
function onLoadInit(target:MovieClip){
   bmp = new BitmapData(target._width, target._height, true, null);
   bmp.draw(target);
   
   /*
   * aquí puedes hacer lo que quieras ya con tu instancia de bitmapData, ya lo tienes como
   * si lo hubieras echo un bmp.loadBitmap();
   * o como yo en este caso ponerle un filtro.
   */
   
   bmp.applyFilter(bmp, bmp.rectangle, new Point(0, 0), new BevelFilter());
   
   target.removeMovieClip();
   this.attachBitmap(bmp, 1);
}
var mc:MovieClip = this.createEmptyMovieClip("tmp_mc", 1);
loader.loadClip("http://www.cristalab.com/foros/templates/smartBlue/images/lang_english/reply.gif", mc);


Saludos!

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 27 Jul 2007 08:32 pm
Gracias Cep,

Trato de programar una entrada externa de cualquier imagen al magnifico código que puso Teseo de como implementar un puzzle y hacer particiones por código en http://www.cristalab.com/tips/35392/puzzles-y-particiones-de-imagenes-en-flash-8

Según entiendo la llamada a la función se hace:

cimg=0; c = 4 ; f = 4; tipo = false; imagen = "imagen";
puzzle(imagen, f, c, tipo);

y ya dentro de la función:

img = BitmapData.loadBitmap(imagen);

Entiendo que imagen es el identificador del bitmap. Mi pregunta es: ¿Como puedo dar nombre al identificador para que antes de la llamada a la función puzzle pueda poner -- imagen = "imagen" ---?

Saludos.

Por navegante_ante

3 de clabLevel



Genero:Masculino  

España

firefox
Citar            
MensajeEscrito el 27 Jul 2007 08:57 pm
Tienes que modificar la función puzzle, no esperes que todo el código que veas lo puedes usar tal cual esta, tienes que aprender que son ejemplo para que tu los modifiques.

Lo que tienes que hacer es cambiar en la función puzzle esta linea:

Código :

 img = BitmapData.loadBitmap(imagen);


Por

Código :

 img = imagen;


O, remover esa linea y cambairle el nombre de el parametro " imagen" por "img".

Saludos!

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 27 Jul 2007 09:35 pm
Ando un poco despistado en cuanto a la forma de implementar lo que me comentas. Ya dije que tengo un nivel bajo de actionscript y pongo empeño por entender todo lo que se me explica.

Lo que necesito poder programar en actionscript es:

1) Como exportar un bitmap externo a la biblioteca (solo como imagen).
Si lo hago directamente sin codigo hago: File/Import/Import to library

2) Como dar nombre al identificador del bitmap y dejarlo como exportable.
Si lo hago directamente sin codigo hago: En la biblioteca sobre el bitmap botón derecho del ratón/Properties alli marco la casilla Export for actionscript y escribo en Identifier: imagen

Es decir, quisiera saber si hay algun método de hacer en actionscript lo que hago de modo manual. Ya que si lo hago manual, solo me sirve para imagenes insertadas en la biblioteca previamente y mediante programacion actionscript podria insertar cualquier imagen externa de una carpeta o enlace web.

Pido un poquito de paciencia conmigo, jeje que intento asimilar todo lo que voy aprendiendo dia a dia.

Saludos y gracias Cep por tu atención.

Por navegante_ante

3 de clabLevel



Genero:Masculino  

España

firefox
Citar            
MensajeEscrito el 27 Jul 2007 09:55 pm
No lo puedes hacer exactamente como en "manual", como te explique en el primer post, tienes que cargar la imagen, y después hacerle un draw();

Cuando tu lo haces "manual" es decir bmpData.loadBitmap("id");, es lo mismo que hacer lo que te puse en el primer post.
Digamos que hacer un BitmapData.draw() es lo mismo que hacer un BitmapData.loadBitmap(), con la diferencia que con el loadBitmap, toma el símbolo de la librería, y con el draw, lo puedes tomar en tiempo de ejecución.

Y como te explique en el segundo post, solo tienes que cambiar una linea de la función, la cual te deje en el mismo.

Saludos!.

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 27 Jul 2007 10:48 pm
gracias a tus explicaciones Cep ya voy entendiendo como va el sistema. Te pongo lo que tengo de momento, lo unico que posiblemente falle sea cuando le paso el bmp a la función y la manera de recogerla.

Necesito pasarle el bitmap para que pueda recortarlo la función puzzle.

import flash.display.*;
import flash.geom.*;
import flash.filters.*;

var bmp:BitmapData;
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
function onLoadInit(target:MovieClip){
bmp = new BitmapData(target._width, target._height, true, null);
bmp.draw(target);

// aquí puedes hacer lo que quieras ya con tu instancia de bitmapData, ya lo tienes como
// si lo hubieras echo un bmp.loadBitmap();
// o como yo en este caso ponerle un filtro.

//bmp.applyFilter(bmp, bmp.rectangle, new Point(0, 0), new BevelFilter());

target.removeMovieClip();
this.attachBitmap(bmp, 1);
}
var mc:MovieClip = this.createEmptyMovieClip("tmp_mc", 1);
loader.loadClip("1614.jpg", mc);

cimg=0; c = 4 ; f = 4; tipo = false; imagen = bmp;
puzzle(imagen, f, c, tipo);

function puzzle(imagen, f, c, lin) {
//aqui estaria el codigo de la función
//
img=imagen;
w = img.width; h = img.height; m1 = w/(3*c); m2 = h/(3*f);
//aqui va más codigo
//
tmp2 = new BitmapData(5*m1, 5*m2, true, 0);
pt[n] = new Point((n%c)*3*m1-m1, Math.floor(n/c)*3*m2-m2);
tmp2.copyPixels(img,new Rectangle(pt[n].x,pt[n].y,5*m1,5*m2),null);
//resto de codigo
//
}

Por navegante_ante

3 de clabLevel



Genero:Masculino  

España

firefox
Citar            
MensajeEscrito el 27 Jul 2007 11:09 pm

Código :

import flash.display.*;
import flash.geom.*;
import flash.filters.*;
cimg = 0;
c = 4;
f = 4;
tipo = false;
imagen = "imagen";
var bmp:BitmapData;
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
function onLoadInit(target:MovieClip) {
   bmp = new BitmapData(target._width, target._height, true, null);
   bmp.draw(target);
   // aquí puedes hacer lo que quieras ya con tu instancia de bitmapData, ya lo tienes como
   // si lo hubieras echo un bmp.loadBitmap();
   // o como yo en este caso ponerle un filtro.
   //bmp.applyFilter(bmp, bmp.rectangle, new Point(0, 0), new BevelFilter());
   target.removeMovieClip();
   //this.attachBitmap(bmp, 1);
   puzzle(bmp, 4, 4, false);
}
var mc:MovieClip = this.createEmptyMovieClip("tmp_mc", 1);
loader.loadClip("http://www.cristalab.com/images/header/logo.png", mc);
function puzzle(imagen, f, c, lin) {
   for (hg=0; hg<4*tpz; hg++) {
      pz[hg].removeMovieClip();
   }
   a = new Array(1, 12, 0, .35, 2, 12, 1, .15, 3, 2, 4, .2, 5, 4, 6, .5, 7, 6, 8, .5, 10, 12, 2, .15, 9, 8, 10, .4, 11, 12, 10, .15);
   tpz = f*c;
   c>f ? j=20/c : j=20/f;
   bF = new BevelFilter(1, 45, 0xffffff, .5, 0, .5, j, j, 4, 3, "inner", false);
   img = imagen;
   //BitmapData.loadBitmap(imagen);
   w = img.width;
   h = img.height;
   m1 = w/(3*c);
   m2 = h/(3*f);
   if (!cimg) {
      b = [];
   }
   //solo en demo. 
   texto = "completo";
   // solo en demo.
   // creando matriz delados congruentes entre piezas contiguas
   p = [];
   d = 0;
   for (m=0; m<4*tpz; m += 4) {
      p[m+7] = p[m+1]=d++;
      if ((d-1)%(2*c) == 2*(c-1)) {
         p[m+1] = p[(m+4)%(4*tpz)+3]=2*tpz-2;
      }
      p[m+4*c] = p[m+2]=d++;
      if (d>2*(tpz-c) && d%2 == 0) {
         p[m+2] = p[(m+4*c)%(4*tpz)]=2*tpz-1;
      }
   }
   for (g=0; g<2*tpz; g++) {
      if (!cimg) {
         //solo en demo;
         b[g] = [];
         b[g][0] = new Point(m1, m2);
         alea()<0 ? sig=-1 : sig=1;
         if (g%2 == 0) {
            //puntos para lados horizontales
            b[g][12] = new Point(m1, 4*m2);
            b[g][4] = new Point(m1-m1*sig*.6, m2*(2+alea()));
            b[g][6] = new Point(m1-m1*sig*.9, m2*(2.5+alea()));
            b[g][8] = new Point(m1-m1*sig*.6, m2*(3+alea()));
         } else {
            //puntos para lados verticales
            b[g][12] = new Point(4*m1, m2);
            b[g][4] = new Point(m1*(2+alea()), m2-m2*sig*.6);
            b[g][6] = new Point(m1*(2.5+alea()), m2-m2*sig*.9);
            b[g][8] = new Point(m1*(3+alea()), m2-m2*sig*.6);
         }
         for (r=0; r<29; r += 4) {
            //puntos centrales para H y V 
            b[g][a[r]] = Point.interpolate(b[g][a[r+1]], b[g][a[r+2]], a[r+3]+alea());
         }
      }
   }
   //fin cimg solo en demo;
   pz = [];
   pt = [];
   for (n=0; n<f*c; n++) {
      pz[n] = createEmptyMovieClip("pz"+n, n+1);
      tmp2 = new BitmapData(5*m1, 5*m2, true, 0);
      pt[n] = new Point((n%c)*3*m1-m1, Math.floor(n/c)*3*m2-m2);
      tmp2.copyPixels(img, new Rectangle(pt[n].x, pt[n].y, 5*m1, 5*m2), null);
      //dibujando los 4 lados de cada pieza
      for (z=0; z<4; z++) {
         z == 2 ? sy=3*m2 : sy=0;
         z == 1 ? sx=3*m1 : sx=0;
         g = p[4*n+z];
         pz[n].beginBitmapFill(tmp2);
         pz[n].moveTo(5*m1/2, 5*m2/2);
         pz[n].lineTo(b[g][0].x+sx, b[g][0].y+sy);
         if (g>(2*tpz-3) || lin) {
            pz[n].lineTo(b[g][12].x+sx, b[g][12].y+sy);
         } else {
            pz[n].lineTo(b[g][1].x+sx, b[g][1].y+sy);
            for (j=2; j<12; j += 2) {
               pz[n].curveTo(b[g][j].x+sx, b[g][j].y+sy, b[g][j+1].x+sx, b[g][j+1].y+sy);
            }
            pz[n].lineTo(b[g][12].x+sx, b[g][12].y+sy);
         }
         pz[n].lineTo(5*m1/2, 5*m2/2);
         pz[n].endFill();
      }
      //doblando la asignacion para evitar fallos por decimales.
      pz[n]._x = pt[n].x;
      pt[n].x = pz[n]._x;
      pz[n]._y = pt[n].y;
      pt[n].y = pz[n]._y;
      pz[n].filters = [bF];
      pz[n].v = n;
   }
   for (h=0; h<tpz; h++) {
      pz[h].onPress = function() {
         this.startDrag();
         this.swapDepths(tpz+1);
      };
      pz[h].onRelease = function() {
         this.stopDrag();
         // iman de colocación si está cerca la pieza.
         cerca = new Point(this._x, this._y);
         if (Point.distance(pt[this.v], cerca)<4+(m1+m2)/15) {
            this._x = pt[this.v].x;
            this._y = pt[this.v].y;
         }
         //comprobador de puzzle completo: 
         cnt = 0;
         for (tt=0; tt<tpz; tt++) {
            if ((pz[tt]._y == pt[tt].y) && (pz[tt]._x == pt[tt].x)) {
               ++cnt;
            }
            cnt == tpz ? texto="completo" : texto="faltan: "+(tpz-cnt);
         }
      };
   }
   cimg = 0;
   //solo en demo
}
//fin puzzle
function alea() {
   return (.1-Math.random()/5);
}
filamas.onPress = function() {
   f++;
   puzzle(imagen, f, c, tipo);
};
filamenos.onPress = function() {
   f>1 ? f-- : f=1;
   puzzle(imagen, f, c, tipo);
};
columas.onPress = function() {
   c++;
   puzzle(imagen, f, c, tipo);
};
columenos.onPress = function() {
   c>1 ? c-- : c=1;
   puzzle(imagen, f, c, tipo);
};
mtipo.onPress = function() {
   tipo = !tipo;
   tipo == false ? txtipo="puzzle" : txtipo="cuadros";
   cimg = 1;
   puzzle(imagen, f, c, tipo);
};
cambio.onPress = function() {
   puzzle(imagen, f, c, tipo);
};
nimagen.onPress = function() {
   imagen == "imagen" ? imagen="imagen1" : imagen="imagen";
   cimg = 1;
   puzzle(imagen, f, c, tipo);
};

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 27 Jul 2007 11:47 pm
Muchisimas gracias Cep por tanta paciencia. Ahora si veo el modo de proceder a la hora de hacer cargas dinamicas de bitmaps. Perfectamente entendido.

Gracias a tu ayuda puedo seguir adelante.

Saludos y hasta pronto.

Por navegante_ante

3 de clabLevel



Genero:Masculino  

España

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.