Image Actionscript:使用平滑调整位图数据的大小

Image Actionscript:使用平滑调整位图数据的大小,image,actionscript,bitmap,Image,Actionscript,Bitmap,图像大小调整有问题。看起来平滑不起作用或代码中缺少某些内容。也许Matrix应该有更多的东西 原始图像: 结果是: 我可以链接其他一些图片。存在一些奇怪的像素配置。 它能被修复吗 我已经100%测试了jpeg质量和stage.quality='best',但没有一个给出所需的质量结果。在BitmapData上绘制BitmapData时,您的问题似乎是“最近的”采样模式。也许以下几点会有所帮助: var bd:BitmapData=new BitmapData(file.width,file.

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

原始图像:

结果是:

我可以链接其他一些图片。存在一些奇怪的像素配置。 它能被修复吗


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

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

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

使用Flash的本机图形渲染器很可能会在绘制的位图上执行至少一次双线性插值,这似乎是您想要的结果。另外,
stage.quality
适用于将该形状添加到stage的情况(顺便说一句,您可以使用该形状显示上传的图片,然后绘制位图数据以保存)。但是,这可能不起作用-我现在无法对此进行测试。

在位图数据上绘制位图数据时,您的问题似乎是“最近”采样模式。也许以下几点会有所帮助:

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

使用Flash的本机图形渲染器很可能会在绘制的位图上执行至少一次双线性插值,这似乎是您想要的结果。另外,
stage.quality
适用于将该形状添加到stage的情况(顺便说一句,您可以使用该形状显示上传的图片,然后绘制位图数据以保存)。但是,这可能不起作用-我现在无法测试。

有人吗?任何提示都行。它对我来说很好,而且你的代码似乎还可以。。。真的不知道该告诉你什么(因为这不应该受到平台或任何其他场景或外部配置的影响)。是否确实要将正确的位图数据添加到后台?位图数据是从加载程序对象中拾取的。来自用户机器。也许问题出在Math.floor?有些像素被四舍五入到错误的一侧,从那里我得到像素失真?不太可能,因为较低的宽度/高度只会裁剪图像。我之前的意思是,您应该仔细检查您添加到屏幕上的位图数据是否实际上是“resizedBd”而不是“bd”(其位图对象的宽度和高度已更改)。有人吗?任何提示都行。它对我来说很好,而且你的代码似乎还可以。。。真的不知道该告诉你什么(因为这不应该受到平台或任何其他场景或外部配置的影响)。是否确实要将正确的位图数据添加到后台?位图数据是从加载程序对象中拾取的。来自用户机器。也许问题出在Math.floor?有些像素被四舍五入到错误的一侧,从那里我得到像素失真?不太可能,因为较低的宽度/高度只会裁剪图像。我之前的意思是,您应该仔细检查添加到屏幕上的位图数据是否为“resizedBd”,而不是“bd”(其位图对象的宽度和高度已更改)。它正常工作!该死的。这个解决方案背后隐藏着什么魔力?:)我必须填补我知识上的空白有新样品。你可以把它和旧的比较一下。再次感谢!:)它起作用了!该死的。这个解决方案背后隐藏着什么魔力?:)我必须填补我知识上的空白有新样品。你可以把它和旧的比较一下。再次感谢!:)