2011-07-18 1 views
1

포럼에서 다음 코드를 복사했지만 플래시에서 작동하지 않습니다.내 플래시에서 파일을 다음과 같이 사용하는 방법은 무엇입니까?

무대에서 나는 사용하고 싶은 jpg가 있고 다음 코드를 사용하여 jpg를 편집하고 싶습니다. 따라서 게시 >> 클래스 >> LomoBitmapdata 을 편집하고 as 파일을 호출하는 버튼을 추가하면 출력 플래시에 '오류 1114'가 표시됩니다.

여기 당신은 충분히 특정하지 않은 파일 http://www.2shared.com/file/mwNIBwKM/LomoBitmapdata.html

package 
{ 
    import flash.display.BitmapData; 
    import flash.display.GradientType; 
    import flash.display.Graphics; 
    import flash.display.Shape; 
    import flash.display.SpreadMethod; 
    import flash.geom.ColorTransform; 
    import flash.geom.Matrix; 
    import flash.geom.Rectangle; 
    import flash.display.Sprite; 

    public class LomoBitmapdata 
    { 

     private var bitmapdata:BitmapData; 
     private var lightBitmapdata:BitmapData; 
     public function LomoBitmapdata() 
     { 
     } 
     public function processLomo(bitmapdata:BitmapData):void{ 
      this.bitmapdata = bitmapdata; 
      processSereen(); 
      lightBitmapdata = bitmapdata.clone(); 
      processInvert(); 
      processRedAdd(); 
      drawShape(); 
     } 
     private function processPixel(fun:Function):void{ 
      for(var i:int=0;i<bitmapdata.width;i++){ 
       for(var j:int=0;j<bitmapdata.height;j++){ 
        fun(i,j); 
       } 
      } 
     } 
     private function processSereen():void{ 
      processPixel(sereenBitmaps); 
     } 
     private function sereenBitmaps(i:int,j:int):void{ 
      var color32:uint = bitmapdata.getPixel(i,j); 
      var red:int = color32 >> 16; 
      var green:int = color32 >> 8 & 0xFF; 
      var blue:int = color32 & 0xFF; 

      var redInt:int = screenBase(red,red); 
      var greenInt:int = screenBase(green,green); 
      var blueInt:int = screenBase(blue,blue); 

      var newUint:uint = redInt << 16 | greenInt << 8 | blueInt; 
      bitmapdata.setPixel(i,j,newUint); 
     } 
     private function screenBase(topPixel:int, bottomPixel:int):int { 
      return (255 - ((255 - topPixel) * (255 - bottomPixel))/255); 
     } 
     private function processInvert():void{ 
      bitmapdata.colorTransform(new Rectangle(0,0,bitmapdata.width,bitmapdata.height),new ColorTransform(-1,-1,-1,1,255,255,255,1)); 
     } 
     private function processRedAdd():void{ 
      processPixel(redadd); 
     } 
     private function redadd(i:int,j:int):void{ 
      var top:uint = bitmapdata.getPixel(i,j); 
      var bottom:uint = lightBitmapdata.getPixel(i,j); 

      var red:int = top >> 16; 
      var green:int = top >> 8 & 0xFF; 
      var blue:int = top & 0xFF; 

      var redbottom:int = bottom >> 16; 
      var greenbottom:int = bottom >> 8 & 0xFF; 
      var bluebottom:int = bottom & 0xFF; 

      var resultR:int = redbottom; 
      var resultG:int = greenbottom; 
      var resultB:int = blue*0.2 + bluebottom*0.8; 

      var newUint:uint = resultR << 16 | resultG << 8 | resultB; 
      bitmapdata.setPixel(i,j,newUint); 
     } 
     private function drawShape():void{ 
      var shape:Shape = new Shape; 
      var g:Graphics = shape.graphics; 
      var fillType:String = GradientType.RADIAL; 
      var colors:Array = [0x000000, 0x000000]; 
      var alphas:Array = [0, 0.3]; 
      var ratios:Array = [200,255]; 
      var matr:Matrix = new Matrix(); 
      matr.createGradientBox(bitmapdata.width+100, bitmapdata.height+100, 0, 0, 0); 
      var spreadMethod:String = SpreadMethod.PAD; 
      g.beginGradientFill(fillType, colors, alphas, ratios,matr); 
      g.drawRect(0,0,bitmapdata.width+160,bitmapdata.height+160); 
      matr = new Matrix(); 
      matr.tx = -50; 
      matr.ty = -50; 
      bitmapdata.draw(shape,matr); 
     } 
    } 
} 
+0

더 구체적으로 알려주시겠습니까, 어떤 행을 알려주시겠습니까? 이 질문은 거의 downvote의 가치가있다. 당신은 당신이하고있는 일, 일어났던 일, 일어날 일 등을 설명 할 필요가 있습니다. 엄청난 코드 덩어리를 게시하고 사람들에게 알아 내도록 요청할 수는 없습니다. –

답변

0

, 그래서 그것은 당신에게 구체적인 조언을 제공하기는 어렵습니다. 코드는 BitmapData 객체를 조작하는 메서드가 포함 된 클래스입니다. 일반적인 사용은 다음과 같습니다 당신이 이해하지 않는 경우

 
//provided you have a BitmapData instance (let's call it bmd)... 
var lomo: LomoBitmapdata = new LomoBitmapdata(); 
lomo.processLomo(bmd); 

, 나는 그렇지 않으면 당신은 불가능 비슷한 코드 예제를 사용하여 찾을 수 있습니다, 액션 스크립트 3에 대한 학습 추천 할 것입니다.

+0

회신 해 주셔서 감사합니다. 그냥 actionscript3을 배우기 시작합니다. 전에 as2를 사용하기 전에 learas3 몇 주. // BitmapData 인스턴스가 제공된다면 (bmd라고 부르 자 ...) var lomo : LomoBitmapdata = new LomoBitmapdata(); 버튼에 사용할 코드를 어디에 넣을 수 있습니까? lomo.processLomo (bmd); – jack

+1

당신이 잭을 배우고 있다면, 나는이 사이트를 추천 할 것이다 : http://gotoandlearn.com/. –

+0

[Lost Actionscript Week End] (http://tv.adobe.com/show/colin-moocks-lost-actionscript-weekend)도 훌륭한 자료입니다. – PatrickS