Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
Última revisiónAmbos lados, revisión siguiente
wiki:2.-desarrollo-app:2.5.-controles-by-xone:p.-camara:start [2019/09/13 14:23] – [Cámara by XOne] arywiki:2.-desarrollo-app:2.5.-controles-by-xone:p.-camara:start [2019/09/16 15:02] ary
Línea 13: Línea 13:
 donde "MAP_CAMERA" es la propiedad de la cámara.\\ donde "MAP_CAMERA" es la propiedad de la cámara.\\
 \\ \\
 +
 __Estas funciones son:__ __Estas funciones son:__
  
Línea 44: Línea 45:
      
   * control.setOnCodeScanned, es para escanear (En este caso tiene un parámetro que es una función de callback, para lo que se quiera hacer con el código escaneado).   * control.setOnCodeScanned, es para escanear (En este caso tiene un parámetro que es una función de callback, para lo que se quiera hacer con el código escaneado).
 +
 +\\
 +Ejemplo:
 +
 +\\
 +
 +
 +
 +<code javascript>
 +<coll name="CustomCamera" title="" notab="true" editmask="0" sql="SELECT * FROM GEN_USUARIOS">
 +    <group name="HEADER" id="10" class="groupfixed_header">
 +        <frame name="frmtitulo" class="frmsuperior">
 +          <prop name="SALIR" type="B" class="btvolversuper" />
 +          <prop name="MENU" type="TL" class="tlsuper" title="CAMARA" />
 +          <prop name="MAP_COLORACTIVO" type="T" visible="0" />
 +        </frame>
 +    </group>
 +    
 +    <group name="FOOTER" id="0" class="groupfixed_footer">
 +        <prop name="MAP_GROUP" type="N" visible="0" />
 +        <prop name="MAP_TOTAL_PAGES" type="N" visible="0" />
 +        <frame name="FLOAT_FOOTER_FRAME" class="frmsuperior">
 +          <prop name="MAP_LAST" type="B" img="last.png" title="Anterior" onclick="javascript:prev(self,'ir');" methodx="ExecuteNode(anterior)" forecolor="#FFFFFF" width="45%" height="80%" labelwidth="1" imgsel="last-sel.png" disablevisible="MAP_GROUP=1" />
 +          <prop name="MAP_LAST_EMPTY" type="B" bgcolor="#00000000" width="45%" height="80%" labelwidth="1" newline="false" disablevisible="MAP_GROUP&gt;1" />
 +          <prop name="MAP_NEXT" type="B" img="next.png" title="Siguiente " onclick="javascript:next(self,'ir');" methodx="ExecuteNode(siguiente)" forecolor="#FFFFFF" width="45%" height="80%" labelwidth="1" newline="false" lmargin="6%" imgsel="next-sel.png" disablevisible="MAP_GROUP=MAP_TOTAL_PAGES" />
 +        </frame>
 +    </group>
 +    
 +    <group name="General" id="1">
 +        <frame name="group1Frame" class="frmtodo" height="1040p" bgcolor="#FFFFFF" align="top|center">
 +            <frame name="frmTop" tmargin="0" width="100%" height="28%" align="center|top" xbgcolor="#FF040E1A">
 +                <prop name="MAP_TOGGLE_FLASH_MODE" title="Cambiar Flash"  type="B" visible="1" onclick="javascript:doToggleFlashMode();" class="btnButton" align="center" height="80p" />        
 +                <prop name="MAP_TOGGLE_CAMERA" title="Cambiar Cámara"  type="B" visible="1" onclick="javascript:doToggleCamera();" lmargin="5%" newline="false" class="btnButton" align="center" height="80p" />        
 +                <prop name="MAP_TOGGLE_AUTOFOCUS" title="Cambiar Auto Enfoque"  type="B" visible="1" onclick="javascript:doToggleAutoFocus();" class="btnButton" align="center" height="80p" />        
 +                <prop name="MAP_CAMERA_QUALITY" type="T" visible="1" labelwidth="9" width="700p" height="50p" tmargin="30p" img-height="55p" img-width="60p" linkedto="MAP_CAMERA_QUALITY" linkedfield="DATA" mapcol-values="high,qvga,low,480p,720p,1080p,2160p" title="Calidad de vídeo" showinline="true" text-border="true" />
 +            </frame>
 +            <prop name="MAP_CAMERA" type="VD" visible="1" width="80%" height="50%" viewmode="camerapreview" Xcode-type="ean13" />
 +            <frame name="frmBottom" tmargin="0" width="100%" height="30%" align="center|top" xbgcolor="#FF040E1A">
 +                <prop name="MAP_TAKE_PICTURE" title="Hacer Foto" type="B" visible="1"  onclick="javascript:takePicture();" class="btnButton" align="center" height="80p"/>
 +                <prop name="MAP_START_RECORDING" title="Grabar Vídeo" type="B" visible="1" newline="false" lmargin="5%" onclick="javascript:record();" class="btnButton" align="center" disablevisible="MAP_RECORDING=1" height="80p" />
 +                <prop name="MAP_STOP_RECORDING" title="Detener Vídeo" type="B" visible="1" newline="false" lmargin="5%" onclick="javascript:stopRecording();" class="btnButton" align="center" disablevisible="MAP_RECORDING=0" height="80p" />
 +                <prop name="MAP_START_PREVIEW" title="Iniciar" type="B" visible="1" onclick="javascript:startPreview();" class="btnButton" align="center" disablevisible="MAP_RECORDING=1" height="80p" />
 +                <prop name="MAP_STOP_PREVIEW" title="Detener" type="B" visible="1" newline="false" lmargin="5%" onclick="javascript:stopPreview();" class="btnButton" align="center" disablevisible="MAP_RECORDING=1" height="80p" />
 +            </frame>
 +            
 +        </frame>
 +        <prop name="MAP_RECORDING" type="N" visible="0" />
 +    </group>
 +    </code>
 +
 +
 +
 +
 +<code javascript>
 +
 +function takePicture() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    var params = {
 +        filename     : "test.jpg",
 +        saveToGallery: true,
 +        width        : 360,
 +        height       : 360,
 +        onFinished   : function(sFileName) {
 +            if (!sFileName) {
 +                ui.showToast("Error de cámara");
 +            } else {
 +                ui.showToast("Abriendo nueva foto..."); 
 +                ui.openFile(sFileName);
 +            }
 +        }
 +    };
 +    control.takePicture(params);
 +}
 +
 +function record() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    
 +    var currentObj = self;
 +    let params = {
 +        quality     : self.MAP_CAMERA_QUALITY,
 +        maxDuration : 10000,    // Milisegundos
 +        //maxFileSize : 10485760, // Bytes
 +        withMicAudio: true,
 +        onFinished  : function(sFileName) {
 +            self.MAP_RECORDING=0;
 +            ui.refresh("MAP_START_RECORDING,MAP_STOP_RECORDING,MAP_START_PREVIEW,MAP_STOP_PREVIEW");
 +            if (!sFileName) {
 +                ui.showToast("Error de cámara");
 +            } else {
 +                ui.showToast("Nuevo vídeo..."); 
 +                ui.openFile(sFileName);
 +            }
 +        }
 +    };
 +    control.record(params);
 +    self.MAP_RECORDING=1;
 +    ui.refresh("MAP_START_RECORDING,MAP_STOP_RECORDING,MAP_START_PREVIEW,MAP_STOP_PREVIEW");
 +}
 +
 +function stopRecording() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    control.stopRecording();
 +}
 +
 +function startPreview() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    control.startPreview();
 +}
 +
 +function stopPreview() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    control.stopPreview();
 +}
 +
 +function isOpened() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    let bOpened = control.isCameraOpened();
 +    ui.showToast("Abierta: " + bOpened);
 +}
 +
 +function isAutoFocus() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    let bAutoFocus = control.isAutoFocus();
 +    ui.showToast("Autofoco: " + bAutoFocus);
 +}
 +
 +function getSupportedAspectRatios() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    let allAspectRatios = control.getSupportedAspectRatios();
 +    let sMessage = "Relaciones de aspecto soportadas: ";
 +    for (let i = 0;i < allAspectRatios.length;i++) {
 +        sMessage = sMessage + "\n" + allAspectRatios[i];
 +    }
 +    ui.msgBox(sMessage, "Mensaje", 0);
 +}
 +
 +function doSetOnCodeScanned() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    control.setOnCodeScanned(function(evento) {
 +        let nResult = ui.msgBox("Valor: " + evento.data + "\nTipo: " + evento.type, "¿Código OK?", 4);
 +        if (nResult == 6) {
 +            return true;
 +        } else {
 +            return false;
 +        }
 +    });
 +}
 +
 +/**
 + * Modifica el comportamiento de flash de la cámara.
 + 
 + * Valores posibles:
 + * 1) on: Siempre encendido al tomar una foto
 + * 2) off: Siempre apagado al tomar una foto
 + * 3) torch: Siempre encendido
 + * 4) auto: Encendido o apagado al tomar una foto dependiendo de lo que diga el
 + * sensor de luz
 + * 5) red_eye: Encendido o apagado al tomar una foto dependiendo de lo que diga
 + * el sensor de luz, en un modo especial que reduce los ojos rojos
 + */
 +function doSetFlashMode(sFlashMode) {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    control.setFlashMode(sFlashMode);
 +}
 +
 +function doToggleFlashMode() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    let sFlashMode = control.getFlashMode();
 +    if (sFlashMode == "on") {
 +        control.setFlashMode("off");
 +        self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-off.png");
 +    } else if (sFlashMode == "off") {
 +        control.setFlashMode("auto");
 +        self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-auto.png");
 +    } else if (sFlashMode == "auto") {
 +        control.setFlashMode("torch");
 +        self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-torch.png");
 +    } else if (sFlashMode == "torch") {
 +        control.setFlashMode("on");
 +        self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-on.png");
 +    }
 +    ui.refresh("MAP_TOGGLE_FLASH_MODE");
 +}
 +
 +function doToggleCamera() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    let sCamera = control.getCamera();
 +    if (sCamera == "front") {
 +        control.setCamera("back");
 +    } else if (sCamera == "back") {
 +        control.setCamera("front");
 +    }
 +}
 +
 +function doToggleAutoFocus() {
 +    let control = getControl("MAP_CAMERA");
 +    if (!control) {
 +        return;
 +    }
 +    control.setAutoFocus(!control.isAutoFocus());
 +}
 +
 +function getControl(sPropName) {
 +    let window = ui.getView(self);
 +    if (!window) {
 +        return null;
 +    }
 +    let control = window[sPropName];
 +    if (!control) {
 +        return null;
 +    }
 +    return control;
 +}
 +</code>
 +
 +
 +
 +
 +
 +
 +