Actionscript / Air / Flex 4 - загрузить изображение из файла, уменьшить его и сохранить как PNG - PullRequest
0 голосов
/ 27 декабря 2010

Я написал эти функции, которые я использую вместе, чтобы уменьшить некоторые BitmapData и сохранить их как PNG.Однако линия scaledImage.draw(originalImage, scalingMatrix, null, null, null, true); со сглаживанием, установленным в значение true, не имеет ожидаемого эффекта сглаживания, когда я сохраняю данные растрового изображения в формате 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();                
    }       

1 Ответ

0 голосов
/ 28 декабря 2010

Оказывается, этот код работал.Это было сохранение сглаженных изображений.Это не было очевидно, потому что изображения, которые я уменьшал, были ~ 20K x 20K пикселей, так что сглаживание в любом случае возникало.Сглаживание было очевидно с более «нормальными» размерами изображений, таких как 2K x 2K пикселей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...