2010-12-27 8 views
0

これらの関数を使用して、BitmapDataを縮小してPNGとして保存します。ただし、スムージングがtrueに設定されたscaledImage.draw(originalImage, scalingMatrix, null, null, null, true);行は、2番目の関数を使用してビットマップデータをPNG形式で保存すると、意図したスムージング効果が得られません。結果の画像ファイルは、アンチエイリアス処理されません。私がここで間違っていることは何ですか?ありがとう!Actionscript/Air/Flex 4 - ファイルからイメージをロードし、スケールダウンし、PNG形式で保存します。

public static function scaleImage(originalImage:BitmapData, size:int):BitmapData 
    { 
     // Calculate the scaled size. 
     var scale:Number; 
     var scaledWidth:Number; 
     var scaledHeight:Number; 

     if (originalImage.width > originalImage.height) 
     { 
      scale = (size as Number)/(originalImage.width as Number); 
      scaledWidth = size; 
      scaledHeight = originalImage.height * scale; 
     } 
     else 
     { 
      scale = (size as Number)/(originalImage.height as Number); 
      scaledHeight = size; 
      scaledWidth = originalImage.width * scale; 
     } 

     var scalingMatrix:Matrix = new Matrix(); 
     scalingMatrix.scale(scale, scale); 

     // Scale the image. 
     var scaledImage:BitmapData = new BitmapData(scaledWidth, scaledHeight, true, 0x00000000); 
     scaledImage.draw(originalImage, scalingMatrix, null, null, null, true); 

     return scaledImage; 
    } 

    public static function saveImageAsPNG(image:BitmapData, imageFile:File):void 
    { 
     // Encode the image as a PNG. 
     var pngEncoder:PNGEncoder = new PNGEncoder(); 
     var imageByteArray:ByteArray = pngEncoder.encode(image); 

     // Write the image data to a file. 
     var imageFileStream:FileStream = new FileStream(); 
     imageFileStream.open(imageFile, FileMode.WRITE); 
     imageFileStream.writeBytes(imageByteArray); 
     imageFileStream.close();     
    }  

答えて

0

このコードが機能していたことが分かります。平滑化された画像を保存していました。私が縮小していた画像が〜20K x 20Kピクセルだったので、それは明らかではなかったので、とにかくジャギーがスムーズに現れました。平滑化は、2K×2Kピクセルのような「通常の」サイズの画像を使用すると明らかです。

関連する問題