【问题标题】:downsample bitmap image pixels actionscript 3?下采样位图图像像素 actionscript 3?
【发布时间】:2012-06-12 20:17:30
【问题描述】:

我需要将图像中的像素从 480 X 480 减少到 30 X 30。这需要对像素进行下采样,我没有看到任何删除位图图像中单个像素的方法。

我需要这种下采样,因为我正在研究图像处理中的失真 - 简而言之。

对此的任何帮助将不胜感激。

【问题讨论】:

  • 创建一个 30x30 的新 BitmapData 然后设置算法以在新 BitmapData 上复制或设置适当的像素而不是尝试从初始像素中减去像素是否存在问题?
  • 谢谢,我会试试的。我只关注一种解决方案。

标签: image actionscript-3 image-processing


【解决方案1】:
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.net.URLRequest;

    public class DownSampling extends Sprite
    {
        private var _loader : Loader;
        public function DownSampling()
        {
            _loader = new Loader;
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImgLoaded);

            // Get the bitmap
            _loader.load(new URLRequest("https://appharbor.com/assets/images/*-logo.png"));
        }

        private function onImgLoaded(e : Event) : void
        {
            var currentBitmapdata : BitmapData = Bitmap(_loader.content).bitmapData;
            var i : uint = 9;
            var downFactor : Number = 0.2;

            // this will reduce size by 20%
            var downMat : Matrix = new Matrix;
            downMat.scale(1 - downFactor, 1 - downFactor);

            while(--i)
            {
                // Create new bitmapdata but smaller
                var smallerImg : BitmapData = new BitmapData(currentBitmapdata.width * (1-downFactor), currentBitmapdata.height * (1-downFactor), true, 0);

                // Copy and apply scale
                smallerImg.draw(currentBitmapdata, downMat);

                // Add to stage and set alpha to 50%
                addChild(new Bitmap(smallerImg)).alpha = .5;

                // Apply the same transform next loop
                currentBitmapdata = smallerImg;
            }
        }

    }
}

结果:

【讨论】: