我在AS3中有这个,打算截取您的网络摄像头并在其上显示时间戳
var width = 196;
var height = 147;
var screenshot:BitmapData = new BitmapData(width,height,false);
var overlay:BitmapData = new BitmapData(90,90,false);
var m:Matrix = new Matrix();
var m2:Matrix = new Matrix();
var scale:Number = 1;
m.scale(width/(myCam.width),height/(myCam.height)); //Scale for thumbnail.
m2.scale(scale,scale); //scale for timeRect
overlay.draw(timeGroup,m2);
screenshot.draw(VD1,m); //a 400x300 image
screenshot.merge(overlay,new Rectangle(0,0,timeRect.width*scale,timeRect.height*scale),new Point(width-(timeRect.width*scale)+1, height-(timeRect.height*scale)+1), 256, 256, 256, 256);
因为我故意将400x300图像缩小为196x147,所以它看起来比平时更糟糕,但是可以通过。
但是,如果我调整scale
变量,我与屏幕截图合并的overlay
(时间戳)图片看起来非常糟糕。
overlay
设置为1时 scale
当
overlay
设置为.5时 scale
我如何保持"质量"没有丢失所有细节?
答案 0 :(得分:0)
Fisrt,尝试在smoothing
方法中使用draw
参数。
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
其次,当您使用低比例因子进行缩放时,您可以尝试按几个步骤进行缩放(结果会更平滑)。类似的东西(伪代码):
bigImageBD = scaleImage(sourceImageBitmapData, bigScaleFactor, BIG_IMAGE_WIDTH, BIG_IMAGE_HEIGHT);
smallImageBD = scaleImage(bigImageBD, smallScaleFactor, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT);
最后一个,来自similar question的一些魔法。