代码之家  ›  专栏  ›  技术社区  ›  user773737

缩小位图会使其看起来更糟吗?

  •  0
  • user773737  · 技术社区  · 10 年前

    我在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 (时间戳)我正在与截图合并的图像看起来非常糟糕。

    覆盖 什么时候 规模 设置为1,

    enter image description here

    覆盖 什么时候 规模 设置为.5:

    enter image description here

    我如何保持“质量”而不丢失所有细节?

    1 回复  |  直到 10 年前
        1
  •  0
  •   Community CDub    8 年前

    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 .

    推荐文章