2011-06-14 11 views
5

Estoy tratando de una aplicación basada en cámara web. Empecé el código de esta manera:¿Cómo aumentar la calidad de la cámara con AS3?

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

Mi problema es que la calidad del video. Estoy usando una máquina iMac, en la que la calidad de la cámara es buena. ¿Hay alguna forma de aumentar la calidad de la salida de la cámara?

Gracias por la ayuda.

Respuesta

10

Aquí hay un código de ejemplo

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(); 
     } 

    } 
} 
+1

Bien, aunque ¿por qué tienes súper() al azar? – Marty

+0

A veces es mejor tenerlo que no hacerlo. Tal vez no sea necesario en este caso, pero estoy acostumbrado a escribirlo siempre en el constructor. –

+0

Lo suficiente ... super() normalmente solo es necesario si marca un método para anular. – Marty

3

Use setQuality()

Parámetros

ancho de banda: int - Especifica el cantidad máxima de ancho de banda que la corriente la salida de vídeo se puede utilizar, en bytes por segundo . Para especificar que Flash Player video puede usar tanto ancho de banda como sea necesario para mantener el valor de calidad, pase 0 para ancho de banda. El valor por defecto es 16384.

calidad: int - Un entero que especifica el nivel requerido de calidad de imagen, como determinado por la cantidad de de compresión que se aplica a cada trama video. Los valores aceptables oscilan entre desde 1 (calidad más baja, compresión máxima ) hasta 100 (calidad más alta, sin compresión). Para especificar que la calidad de la imagen puede variar según sea necesario para evite exceder el ancho de banda, pase 0 para la calidad .

+0

@Marty ... He intentado que con la salida setQuality command.Same. La salida fue pixelada. También apliqué vid1.smoothing = true; que resultó en borrosidad, por supuesto, pérdida de calidad. –

+0

No creo que pueda aumentar la calidad más allá de lo que este método puede ofrecer. – Marty

+0

@Marty ... Muchas gracias, hombre. –

Cuestiones relacionadas