• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-05-2009, 10:26   #1 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 6
Question Rastereffekt mit AS3

Hallo zusammen,

wie kriege ich denn so einen Raster-Effekt hin wie auf dieser Seite:
http://www.dmcgroup.eu/de/

Meine Seite hat auch einen Film im Vollbild laufen, aber die Rasterung ist schwierig.
Ich hatte es zunächst mit einem transparenten PNG versucht, das ich mit Photoshop vorbereitet hatte. Das ergibt aber Pixelfehler auf dem Screen, sobald man das Fenster skaliert.

Ich bin für jeden Tipp dankbar!
dhoefgen ist offline   Mit Zitat antworten
Alt 19-05-2009, 10:41   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
hi und willkommen im flashforum,
schau mal. das folgende bsp. dürfte dir weiterhelfen:
PHP-Code:
var pattern:BitmapData /* hier deine bitmapData mit der du das raster erstellen willst */

var wi:Number stage.stageWidth;
var 
hi:Number stage.stageHeight;

var 
backroundGrid:Sprite = new Sprite();
    
//backroundGrid.graphics.clear();
    
backroundGrid.graphics.beginBitmapFillpattern );
    
backroundGrid.graphics.drawRect00wihi );
    
addChildbackroundGrid ); 
cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 19-05-2009, 11:13   #3 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 6
Hi sal,

cool danke!

var pattern:BitmapData = /* hier deine bitmapData mit der du das raster erstellen willst */

Dumme Frage (bin AS Newbie): wie gebe ich die Bitmapdatei an...

var pattern:BitmapData = "raster.gif"

??
dhoefgen ist offline   Mit Zitat antworten
Alt 19-05-2009, 11:19   #4 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
wenn dein bild in der bibliothek liegt und einen linkage namen hat... z.B. DeinBitmapData.... dann erzeugste davon eine instanz wie folgt:
PHP-Code:
 = new DeinBitmapData0); 
cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 19-05-2009, 19:55   #5 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
ööööhm - wie wärs den Effekt ins Video reinzurechnen?
Einen geeigneten Filter für dein Videobearbeitungs-Tool deiner Wahl finden, anwenden und rausrendern?

Ansonnsten schreit das ja nach Pixelbender \o/ - lol (ja ich habs im Moment mit Pixelbender)
[RK] ist offline   Mit Zitat antworten
Alt 19-05-2009, 20:41   #6 (permalink)
_lichtecht_
 
Registriert seit: Feb 2003
Ort: prag
Beiträge: 564
Ahoj,

wenn man das Raster direkt ins Video reinzeichnet, dann hat das den derben Nebeneffekt, dass das Raster mitskaliert wird je nach Browserfenstergröße.
Man kann also nicht festlegen wie groß- oder kleinmaschig das Raster wird.

Mich hat vor Kurzem auch mal interessiert wie das gehen könnte und hab das gefunden:
How to create a de-pixelating grid for flash video

PHP-Code:
// Create a transparent black square, 2x2 pixels
var bmpd:BitmapData = new BitmapData(22true0x00000000);
// Create a rectangle, 1x1 pixels
var rect:Rectangle = new Rectangle(0011);
// Place the rectangle inside the bitmap data object
// Give it a color... Black.
bmpd.fillRect(rect,0xFF000000);

Then, use the beginBitmapFill to draw a rectangle the size of your stage...

AS3:
var 
mc:MovieClip = new MovieClip();
// Create a new bitmap fill based on the bitmap data object
// And allow it to repeat
mc.graphics.beginBitmapFill(bmpdnulltrue);
mc.graphics.drawRect(00200200);
mc.graphics.endFill();

AS2:
var 
mc:MovieClip createEmptyMovieClip("grid_mc"1);
with (mc) {
beginBitmapFill(bmpd);
moveTo(0,0);
lineTo(0,200);
lineTo(200,200);
lineTo(200,0);
lineTo(0,0);
endFill();

man muß noch das import ...bitmapdata und import ...rectangle oben reinschreiben, ansonsten funktioniert das script für ein Raster.
(Mir ist es aber nicht gelungen es auf stageWidth/height anzulegen. Es hat nicht mitskaliert ... weiß eventuell Einer von Euch wie das geht?)

Gruß
landa
landa ist offline   Mit Zitat antworten
Alt 19-05-2009, 22:47   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 1.184
Diese Raster sind ja auch deshalb so beliebt, weil man damit etwas über die Skalierung/Pixel/Komprimierung hinwegtäuschen kann, wenn man z.B. ein Video im Fullscreen laufen hat.
Wenn man das Raster direkt ins Video reinrechnet, wird es nicht nur mitskaliert, sondern, vor allem wenn es ein feines Pixelraster ist, kaputt komprimiert. Und wenn es nicht bei der Videokompression zermatschen soll, wird die Dateigröße des Videos explodieren.
__________________
EDV = Ende Der Vernunft
hmpf ist offline   Mit Zitat antworten
Alt 19-05-2009, 23:16   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 1.184
Zitat:
Zitat von landa Beitrag anzeigen
(Mir ist es aber nicht gelungen es auf stageWidth/height anzulegen. Es hat nicht mitskaliert ... weiß eventuell Einer von Euch wie das geht?)
ActionScript:
  1. stage.addEventListener(Event.RESIZE, rasterZeichnen);
  2.  
  3. var mc:MovieClip = new MovieClip();
  4. function rasterZeichnen(event:Event):void{
  5.  
  6. mc.graphics.clear();
  7. mc.graphics.beginBitmapFill(bmpd, null, true);
  8. mc.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
  9. mc.graphics.endFill();
  10. }
__________________
EDV = Ende Der Vernunft

Geändert von hmpf (19-05-2009 um 23:18 Uhr)
hmpf ist offline   Mit Zitat antworten
Alt 20-05-2009, 08:30   #9 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
Wie wird eigentlich nur das video iim hintergrund skaliert? der content bleibt immer in der gleichen grösse.
Ich weiss ja mit allowscale und noscale, aber bezieht sich das nicht immer auf den ganzen film?
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 20-05-2009, 09:26   #10 (permalink)
_lichtecht_
 
Registriert seit: Feb 2003
Ort: prag
Beiträge: 564
Zitat:
Zitat von uncle.sam Beitrag anzeigen
Wie wird eigentlich nur das video iim hintergrund skaliert?
Ahoj,

ich hab hier einen mc ("scaleMC") in dem das video-Objekt liegt.
"MC" ist ein movieclip der nicht skaliert, aber mittig positioniert werden soll.

PHP-Code:
Stage.scaleMode "noScale"
//Skalierung für die ganze Bühne abschalten. 
Stage.align "TL"
//Die aktuelle Ausrichtung der SWF-Datei im Player oder Browser. In diesem Fall TL(Top-Left).  
lstrn = new Object(); 
//Listener erstellen. 
lstrn.onResize = function() { 
    
//Beim verändern der Bühnengröße... 
    
scaleMC._x Stage.width/2
    
//den zu skalierenden MovieClip in die Mitte des Flash Films setzen. 
    
scaleMC._y Stage.height/2
    
//den zu skalierenden MovieClip in die Mitte des Flash Films setzen. 
    
scaleMC._width Stage.width
    
//die Breite des MovieClip = die Breite der Bühne. 
    
scaleMC._height Stage.height
    
//die Höhe des MovieClip = die Höhe der Bühne. 
    
MC._x Stage.width/2-280
    
//den MovieClip der nicht skaliert werden soll, in die Mitte des Flash Films setzen. 
    
MC._y Stage.height/2-160
    
//den MovieClip der nicht skaliert werden soll, in die Mitte des Flash Films setzen.
    
}; 
Stage.addListener(lstrn); 
//Listener der Bühne hinzufügen. 
lstrn.onResize() 
//sofort die Funktion aufrufen. 
Es gibt hier im ff ein schönes Tutorial wo das alles anschaulich beschrieben ist.

@hmpf:
bei Deinem script bekomme ich Fehler: kann die funktion Event nicht laden. Was fehlt mir da?

schönen morgentlichen Gruß
landa
landa ist offline   Mit Zitat antworten
Alt 20-05-2009, 09:49   #11 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
gibt es das tut auch in AS3?
edit: das interessante an diesem beispiel ist, das das HGvideo immer im seitenverhältniss bleibt, also nicht verzerrt wird, beim resize.
PHP-Code:
stage.scaleMode StageScaleMode.NO_SCALE;
stage.align StageAlign.TOP_LEFT;

trace("Stage.stageWidth= "+stage.stageWidth);
trace("Stage.stageHeight= "+stage.stageHeight);

stage.addEventListener(Event.RESIZEresizeListener);

function 
resizeListener(e:Event):void 
{
    
hgBild.width stage.stageWidth;
    
hgBild.height stage.stageHeight;
    
hgBild.stage.stageWidth/2;
    
hgBild.stage.stageHeight/2;
}

//positionierung am anfang 
hgBild.width stage.stageWidth;
hgBild.height stage.stageHeight;
hgBild.stage.stageWidth/2;
hgBild.stage.stageHeight/2
habe hier das ganze mal mit einem bild in AS3, nur das bild wird beim resize verzerrt. gibt dafür eine lösung?
__________________
- uncle.sam -

Geändert von uncle.sam (20-05-2009 um 10:07 Uhr)
uncle.sam ist offline   Mit Zitat antworten
Alt 20-05-2009, 10:09   #12 (permalink)
_lichtecht_
 
Registriert seit: Feb 2003
Ort: prag
Beiträge: 564
Zitat:
Zitat von uncle.sam Beitrag anzeigen
das interessante an diesem beispiel ist, das das HGvideo immer im seitenverhältniss bleibt, also nicht verzerrt wird, beim resize.
Das stimmt natürlich, das tut es bei meiner Anwendung nicht (in meinem Fall auch kein Problem)
Interessanter Einwand! ... gute Frage ;-)

gruß
landa
landa ist offline   Mit Zitat antworten
Alt 20-05-2009, 13:55   #13 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 1.184
Zitat:
Zitat von landa Beitrag anzeigen
@hmpf:
bei Deinem script bekomme ich Fehler: kann die funktion Event nicht laden. Was fehlt mir da?
ActionScript:
  1. import flash.events.Event;
  2.     import flash.events.EventDispatcher;

Zitat:
Zitat von uncle.sam Beitrag anzeigen
Wie wird eigentlich nur das video iim hintergrund skaliert? der content bleibt immer in der gleichen grösse.
Ich weiss ja mit allowscale und noscale, aber bezieht sich das nicht immer auf den ganzen film?
Ja, würde ich aber niemals so machen, weil das ziemlich unkontrolliert und amateurhaft ist.
Ich habe mir ein Fullscreen Package für Videos und Bilder geschrieben, ich poste einfach mal die Funktion, die den Inhalt auf Fullscreen skaliert (wird mit stage Event.RESIZE aufgerufen):

ActionScript:
  1. var view : DisplayObject; // das Video/Bild
  2. var alignX : String; // X Ausrichtung: "left", "right", default ist mittig
  3. var alignY : String; // Y Ausrichtung: "top", "bottom", default ist mittig
  4. var distort : Boolean = false // beim Skalieren verzerren oder nicht
  5.  
  6.  
  7.         public function scaleView (event:Event):void{
  8.            
  9.             if(distort){
  10.                 view.width = stage.stageWidth;
  11.                 view.height = stage.stageHeight;
  12.             }
  13.             else{
  14. // unter Beachtung des Seitenverhältnisses wird auf die maximale Größe skaliert
  15. // dabei ist entweder die Höhe ODER die Breite genau passend
  16.                 var v1 : Number = view.width/view.height;
  17.                 var v2 : Number = stage.stageWidth/stage.stageHeight;
  18.                 if(v1 > v2){
  19.                     view.height = stage.stageHeight;
  20.                     view.scaleX = view.scaleY;
  21.                 }
  22.                 else{
  23.                     view.width = stage.stageWidth;
  24.                     view.scaleY = view.scaleX;
  25.                 }
  26.             }
  27.            
  28.             switch(alignX) {
  29.                 case "right" :
  30.                     view.x = (stage.stageWidth - view.width);
  31.                     break;         
  32.                 case "left" :
  33.                     view.x = 0;
  34.                     break;
  35.                 default :
  36.                     view.x = (stage.stageWidth - view.width) / 2;
  37.             }
  38.             switch(alignY) {
  39.                 case "top":
  40.                     view.y = 0
  41.                     break;
  42.                 case "bottom" :
  43.                     view.y = (stage.stageHeight - view.height)
  44.                     break;
  45.                 default :
  46.                     view.y = (stage.stageHeight - view.height) / 2
  47.             }
  48.         }

Edit: wenn das Seitenverhältnis des Bildes/Videos genau dem Seitenverhältnis der Bühne entspricht, ist natürlich Breite UND Höhe genau passend. Aber das ist ja eher unwahrscheinlich...
__________________
EDV = Ende Der Vernunft

Geändert von hmpf (20-05-2009 um 20:54 Uhr)
hmpf ist offline   Mit Zitat antworten
Alt 20-05-2009, 14:34   #14 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
phantastisch. an diese relationsskalierung habe ich auch schon gedacht, aber hmpf hat das wundervoll aufgelöst.
vielen dank!
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 22-05-2009, 09:06   #15 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
um auf die Rasterung zurückzukommen: die in diesem Bespiel besteht aus weissen Punkten falls es noch niemanden aufgefallen sein sollte.
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
as3, raster

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele