【问题标题】:How to increase the Quality of the camera using AS3?如何使用 AS3 提高相机的质量?
【发布时间】:2011-09-14 10:15:38
【问题描述】:

我正在尝试基于网络摄像头的应用程序。我开始这样的代码:

import flash.media.Camera;
import flash.media.Video;
var cam:Camera = Camera.getCamera();
a.vid1.attachCamera(cam);
a.vid1.smoothing = true;

我的问题是视频的质量。 我使用的是 iMac 机器,相机质量很好。 有什么方法可以提高相机输出的质量吗?

感谢您的帮助。

【问题讨论】:

    标签: flash actionscript-3 video camera


    【解决方案1】:

    使用setQuality()

    参数

    bandwidth:int — 指定最大值 当前的带宽量 传出的视频源可以使用,以字节为单位 每秒。指定 Flash 播放器视频可以使用尽可能多的带宽 根据需要保持的价值 质量,通过 0 表示带宽。这 默认值为 16384。

    quality:int — 一个整数,指定 所需的图像质量水平,如 由数量决定 压缩应用于每个 视频帧。可接受的数值范围 从 1 (最低质量,最高 压缩)到 100(最高质量, 没有压缩)。要指定 图片质量可以根据需要变化 避免超出带宽,传递 0 为 质量。

    【讨论】:

    • @Marty... 我用 setQuality 命令尝试过。同样的输出。输出被像素化。我也申请了 vid1.smoothing = true;这导致模糊,当然质量下降。
    • 我认为您无法将质量提高到超出此方法所能提供的范围。
    【解决方案2】:

    这是一个示例代码

    package
    {
        import flash.display.DisplayObject;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.ActivityEvent;
        import flash.events.MouseEvent;
        import flash.media.Camera;
        import flash.media.Video;
    
        public class iosTest extends Sprite
        {
    
            private var cam:Camera;
            private var vid:Video;
    
    
            public function iosTest()
            {
                super();
    
                // support autoOrients
                stage.align = StageAlign.TOP_LEFT;
                stage.scaleMode = StageScaleMode.NO_SCALE;
                cam = Camera.getCamera();
    
                if (!cam) 
                {
                    trace("No camera is installed.");
                }
                else 
                {
                    connectCamera();
                }
            }
    
            private function connectCamera():void 
            {
                cam.setMode(640, 480, 25); 
                cam.setQuality(0,100);
                vid             = new Video();
                vid.width       = cam.width;
                vid.height      = cam.height; 
                vid.attachCamera(cam);
                addChild(vid);    
    
                stage.addEventListener(MouseEvent.CLICK, clickHandler);
            }
    
            private function clickHandler(e:MouseEvent):void 
            {
    
                return;
    
                switch (cam.width) {
                    case 160:
                        cam.setMode(320, 240, 10); 
                        break;
                    case 320:
                        cam.setMode(640, 480, 5); 
                        break;
                    default:
                        cam.setMode(160, 120, 15); 
                        break;
                } 
                removeChild(vid);           
                connectCamera();
            }
    
        }
    }
    

    【讨论】:

    • 很好,不过你为什么随机有 super() 呢?
    • 有时拥有总比没有好。在这种情况下可能不需要,但我习惯于总是在构造函数中编写它。
    • 很公平.. super() 通常仅在您将方法标记为要覆盖时才需要。
    • 是的...在这种情况下,您将覆盖 Sprite 构造函数。实际上它什么也没做......
    • 如果您没有明确地将 super() 调用放在那里,实际上会为您添加调用。它必须在构造函数中。
    猜你喜欢
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多