Flashhilfe.de - Flash Community

Bitmap teilen mit bitmapData [Flash 10]

 


AntwortenRegistrieren Seite1  

Heavy#1
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

01.10.2009, 19:11

ich versuch gerad ein bitmap in einzelne teile zu splitten,
soweit so gut, vervielfältigen kann ich schon, aber die daten
von dem Bitmap sind nur die oben links 50x bis 50 y wie kann
ich das denn in meiner for schleife anpassen ?

so funtz die vervielfältigung:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
for(var i:uint = 0; i < 5; i++)
   {
      var img   :BitmapData    =    new BitmapData(50,50);
         img.draw((e.target as LoaderInfo).content);
         ary_bmDat[ i ]      =    new Bitmap(img);
         
      var neo:DisplayObject   = ary_bmDat[ i ];
         neo.x   = i*50;
         //trace(ary_bmDat);   
         pictureContainer.addChild(neo);//
   }


aber wenn ich "i" einfach in den bitmap parametern übergebe, workts nicht....
Geändert von Heavy am 01.10.09 um 19:11 Uhr
derFloh#2
Benutzerbild von derFloh
Beiträge: 992
Wohnort: ..::LAGE::..
Registriert: Apr 2006

01.10.2009, 21:02

hey
was genau willst du denn erreichen? willst du aus einer bitmap eine kachel erstellen, und
diese dann ganz oft dublizieren, oder willst du deine bitmap in einzelne teile zerschneiden
um diese zu animieren oder so?

für ersteres hab ich mal ne klasse geschrieben...
http://blog.heimatdesign.com/2009/01/kachelnpattern-as3/

für das zweiteres würde ich mit  copyPixels  arbeiten. du gibts die quell-bitmapdata an,
ein rechteck welches die benötiget fläche beschreibt, und auf welchen koordinaten das
rechteck steht...

hoffe das hilft dir weiter
gruß
flo
www.heimatdesign.com
Florin Sans - Buy on myFonts / Fontspring
Heavy#3
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

01.10.2009, 21:10

das zweite wollte ich machen.

Das andere ist natürlich auch cool, aber kacheln find ich nicht so passend,
geschweige denn einsetzbar ;) aber das ist ja geschmackssache.

ok dann guck ich mir jetz mal copy pixels an.

gibts da nen gutes Tutorial, welches ein großes Bild nimmt und
per BitmapData und Copy Pixels in viel kleine Animierbare Teile
zerschneidet ?
Geändert von Heavy am 01.10.09 um 21:14 Uhr
derFloh#4
Benutzerbild von derFloh
Beiträge: 992
Wohnort: ..::LAGE::..
Registriert: Apr 2006

01.10.2009, 21:13

habe mal gerad noch was zusammengeworfen (nicht getestet). kein plan überhaupt läuft :)
dir würde die bitmap in 10 teile zerlegt und in einzelnen bitmaps zusammengelegt.
hoffe sowas in der art suchst du...
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var destPoint : Point = new Point( 0, 0 );
var xPos : Number = 0;
var bdSource : BitmapData = new BitmapData( _bitmap.width, _bitmap.height );


for ( var p:int=0; p<10; p++ )
{
   var yPos : Number = _bitmap.height/10 * p;

   var tile : Sprite = new Sprite;
   var tileSrcBounds : Rectangle = new Rectangle( 0, 0, _bitmap.width, _bitmap.height/10 );
   var tileBmpData : BitmapData = new BitmapData( _bitmap.width, _bitmap.height/10 );

   bdSource.draw( _bitmap );
   tileBmpData.copyPixels( bdSource, tileSrcBounds, destPoint );

   tile.x = xPos;
   tile.y = yPos;
   tile.addChild( new Bitmap( tileBmpData ) );
}


_bitmap  wäre dann deine bitmap auf der bühne.
wenn ich mir das so anschaue ist das allerdings ganz schön viel code.
vielleicht weiß ja jemand auf anhieb ne kürzere lösung....

naja. teste mal obs überhaupt klappt.

gruß
flo
www.heimatdesign.com
Florin Sans - Buy on myFonts / Fontspring
Heavy#5
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

01.10.2009, 21:16

ach soviel ist das doch gar nicht
´s fehlen ja auch noch die zeilen... ;)

PS: wozu ist der destination Point ?
na wadde ich probier mal rum , danke

EDIT.. äh Spalten
Geändert von Heavy am 01.10.09 um 21:22 Uhr
derFloh#6
Benutzerbild von derFloh
Beiträge: 992
Wohnort: ..::LAGE::..
Registriert: Apr 2006

01.10.2009, 21:21

das ist einfach nur der punkt der linken oberen ecke deines rectangles...
laut livedocs:
ActionScript:
1copyPixels(sourceBitmap: BitmapData, sourceRect: Rectangle, destPoint: Point, [alphaBitmap: BitmapData], [alphaPoint: Point], [mergeAlpha: Boolean])

gruß
flo
www.heimatdesign.com
Florin Sans - Buy on myFonts / Fontspring
Heavy#7
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

01.10.2009, 21:24

mal sehen was passiert, wenn ich den verändere, da ich glaube der
bestimmt den ausschnittsstartpunkt, den ich ja versuche zu verändern,
so das das erste teil von 0-50 geht, das zweite dann von 50 - 100 usw.
derFloh#8
Benutzerbild von derFloh
Beiträge: 992
Wohnort: ..::LAGE::..
Registriert: Apr 2006

01.10.2009, 21:31

ah halt, mein fehler.
das gehört mit in diese zeile

ActionScript:
1var tileSrcBounds : Rectangle = new Rectangle( 0, HIERHIN, _bitmap.width, _bitmap.height/10 );
www.heimatdesign.com
Florin Sans - Buy on myFonts / Fontspring
Heavy#9
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

01.10.2009, 21:38

ok warte ik tausch aus, im moment siehts so aus:

und ähhh... wsas kommt dorthin bei "hierhin" ?


http://www.zipl.de/bitmapTest.swf

hier der Code.
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function proc_ImageLoaded(e:Event):void
{
var _bitmap:*   = (e.target as LoaderInfo).content;
   //trace(typeof(_bitmap));
   var xPos : Number = 0;
   var tileSize : Number = 50;
   var destPoint : Point = new Point( 0,0 );
   

   for ( var p:int=0; p<10; p++ )
   {
        var yPos : Number = _bitmap.height/10 * p;
      var size:Number = tileSize*p;
      trace(size);
      var bdSource : BitmapData = new BitmapData( _bitmap.height, tileSize);
        var tile : Sprite = new Sprite;
        var tileSrcBounds : Rectangle = new Rectangle( 0, 0, _bitmap.height, tileSize );
        var tileBmpData : BitmapData = new BitmapData( _bitmap.height, tileSize );
   
        bdSource.draw( _bitmap );
        tileBmpData.copyPixels( bdSource, tileSrcBounds, destPoint );
   
        tile.x = xPos;
        tile.y = yPos;
        tile.addChild( new Bitmap( tileBmpData ) );
      pictureContainer.addChild(tile);
   }
}
Geändert von Heavy am 01.10.09 um 21:39 Uhr
derFloh#10
Benutzerbild von derFloh
Beiträge: 992
Wohnort: ..::LAGE::..
Registriert: Apr 2006

01.10.2009, 21:55

in dem fall kannst dus mal mit  yPos  probieren.
das errechnest du ja vorher schon.
www.heimatdesign.com
Florin Sans - Buy on myFonts / Fontspring
Heavy#11
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

01.10.2009, 22:16

habs gerad hingekriegt :D
ich glaub zwar ich muss`s noch mal sauber machen,
weil ich nen bißchen rumgesaut hab, aber sieht jetz so aus.

http://www.zipl.de/bitmaptest.swf

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var _bitmap:*   = (e.target as LoaderInfo).content;
   var tileSize : Number = _bitmap.width/10;
   var destPoint : Point = new Point( 0,0 );
   
   for ( var p:uint = 0; p < 10; p++ )
   {
      for( var q:uint = 0; q < 10; q++)
      {
        var yPos       : Number       = _bitmap.height/10 * p;
      var xPos       : Number       = tileSize*q;
      var size      : Number       = tileSize*p;
      var bdSource    : BitmapData    = new BitmapData( _bitmap.width, _bitmap.height);
        var tile       : Sprite       = new Sprite;
      var tileSrcBounds : Rectangle    = new Rectangle( xPos, size, tileSize * p, tileSize );
        var tileBmpData : BitmapData    = new BitmapData( tileSize, tileSize );
   
         bdSource.draw( _bitmap );
         tileBmpData.copyPixels( bdSource, tileSrcBounds, destPoint );
         tile.x = xPos;
         tile.y = yPos;
         tile.scaleX;
         tile.scaleY;
         tile.addChild( new Bitmap( tileBmpData ) );
         pictureContainer.addChild(tile);
      }
   }


EDIT:
kann ich irgendwie die Random Funktion auf  den bereich zwischen
70 und 130 eingrenzen ?

wenn ich Math.random nur vermultipliziere, liegen mir die Werte zu
weit auseinander...
Geändert von Heavy am 01.10.09 um 22:18 Uhr
derFloh#12
Benutzerbild von derFloh
Beiträge: 992
Wohnort: ..::LAGE::..
Registriert: Apr 2006

01.10.2009, 22:26

öhmmm
var n : Number = Math.random() * 60 + 70;  oder??

random liefert dir ne zahl zwischen 0 und 1 wenn ihc mich nicht irre.
somit zwischen  0*60 + 70  und  1*60 + 70

gruß
flo
www.heimatdesign.com
Florin Sans - Buy on myFonts / Fontspring
Heavy#13
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

01.10.2009, 22:40

ach ja plus.. *an kopf fass*

öhhh noch n dicker FacePalm.... AS3 arbeitet ja gar nicht mehr mit 100ter scale....

na ja egal, worked fine... danke für deine Hilfe.
hab den link noch mal aktualisiert, falls de mal gucken willst.
als nächstes werd ich jetz alles noch um "- tileSize"+scale nach links
und oben verschieben, und den nullpunkt ausgleichen,  und dann bin
ik erstmal zufrieden, vielleicht noch nen Schatten für so n bißchen
räumlichkeit und irgendwo ablegen ums beim nächsten mal nich
wieder schreiben zu müssen ;)

cool das das so rasch geklappt hat.

falls dir noch was einfällt, ich lass den Beitrag noch nen bißchen offen....
cheerz de Heavy
danke Flo

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de