Actionscript:使用平滑调整bitmapdata的大小

时间:2013-03-14 10:00:34

标签: image actionscript bitmap

var bd:BitmapData=new BitmapData(file.width,file.height);
bd.setPixels(new Rectangle(0,0,file.width,file.height),file.raw);

var scale_x_percents:Number = (w / bd.width);
var scale_y_percents:Number = (h / bd.height);
if(!stretch) {
    if(bd.width*scale_y_percents>=w) {
        scale_x_percents=scale_y_percents;
    }
    else if(bd.height*scale_x_percents>=h) {
        scale_y_percents=scale_x_percents;
    }
}
var matrix:Matrix = new Matrix();
matrix.scale(scale_x_percents,scale_y_percents);

var resizedBd:BitmapData = new BitmapData(Math.floor(bd.width*scale_x_percents), Math.floor(bd.height*scale_y_percents), true, 0x000000);
resizedBd.draw(bd, matrix, null, null, null, true); // true is smoothing option, it will blur sharpened pixels

图像调整大小有问题。看起来平滑不起作用或代码中缺少某些东西。也许Matrix应该有更多的东西?

原始图片:

http://imageshack.us/a/img28/4784/dc7f2ec4b0f3323cdc4e01e.jpg

,结果是:

http://imageshack.us/a/img855/4784/dc7f2ec4b0f3323cdc4e01e.jpg

我可以链接一堆其他图像。存在一些奇怪的像素配置。 它可以以某种方式修复吗?

我已经测试了jpeg质量100%和stage.quality ='best',但没有一个能够提供所需的质量结果。

1 个答案:

答案 0 :(得分:4)

在BitmapData上绘制BitmapData时,您的问题似乎是“最接近”的采样模式。也许以下内容可能有所帮助:

var sh:Shape=new Shape();
sh.graphics.beginBitmapFill(bd,matrix,false,true);
sh.graphics.lineStyle(0,0,0); // no lines border this shape
sh.graphics.drawRect(0,0,resizedBD.width,resizedBD.height);
sh.graphics.endFill();
resizedBD.draw(sh); // or with smoothing on

使用Flash的原生图形渲染器很可能在绘制的位图上至少执行双线性插值,这似乎是您想要的结果。此外,stage.quality适用于将该形状添加到舞台(BTW,您可以使用形状显示上传的图片,然后绘制BitmapData以便保存。)但是,这可能不起作用 - 我可以'现在测试一下。