QZXing, Códigos QR y MeeGo

December 31st, 2012

ZXing es una biblioteca open source para el procesamiento de códigos de barras, la biblioteca ha sido ampliamente portada a varias plataformas, en Qt podemos usar QZXing, la cual se integra fácilmente en Symbian y Harmattan.

En este ejemplo vamos a crear un pequeño lector de codigos QR, pero QZXing es capaz de procesar muchos otros formatos de codigos de barras, como por ejemplo Data Matrix (V1.1), Aztec Code (V1.2), UPC_E, UPC_A, EAN_8, EAN_13, CODE_128, CODE_39 e ITF entre otros.

Para comenzar, hay que bajar y agregar QZXing en nuestro proyecto, para ello solo debemos crear una carpeta QZXing en la raiz del proyecto y copiar dentro de ella todos los archivos que conforman QZXing.

Luego la incluiremos en nuestro proyecto agregando la siguiente linea en el archivo .pro.

include(QZXing/QZXing.pri)

A continuación declararemos la headers de QZXing en el archivo main.cpp.

#include 
#include "qmlapplicationviewer.h"

#include 

Q_DECL_EXPORT int main(int argc, char *argv[])
{
    QZXing::registerQMLTypes();

    QScopedPointer app(createApplication(argc, argv));

    QmlApplicationViewer viewer;
    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    viewer.setMainQmlFile(QLatin1String("qml/qrcodereader/main.qml"));
    viewer.showExpanded();

    return app->exec();
}

Lo bueno de QZXing es que se integra fácilmente con QML, el primer paso es crear los imports a QtMultimediaKit y QZXing, luego crearemos un objeto QZXing que sera el encargado de leer la imagen (imageToDecode) que el elemento Camera tomara cuando presionemos el botón Scan.

Como verán usar e integrar QZXing en un proyecto Harmattan es muy simple, yo no lo he probado en Symbian, pero su integración y uso es similar, lo único que no me ha gustado es como ha quedado el posicionamiento del elemento Camera, primero tuve que usar posicionamiento absoluto en vez de relativo, ya que el elemento Camera no se lleva bien con los anchors, segundo, tuve que aplicar una rotación de 90° ya que el elemento Camera se inicializa en modo landscape y como no encontré ninguna forma de ponerlo en modo retrato decidí usar la rotación.

import QtQuick 1.1
import com.nokia.meego 1.0
import QtMultimediaKit 1.1
import QZXing 1.2

Page {
    id: mainPage
    orientationLock: PageOrientation.LockPortrait
    tools: commonTools

    Rectangle {
        id:header
        width:parent.width
        height: 72
        z:10
        color:"#002c78"
        Text {
            id:title
            text: "QZXing"
            anchors.left: parent.left
            anchors.leftMargin: 8
            anchors.verticalCenter: parent.verticalCenter
            color:"#fff"
            font.pixelSize: 32
            font.weight: Font.Normal
            font.family: "Nokia Pure Text"
            lineHeightMode: Text.FixedHeight
            lineHeight: font.pixelSize * 1.1
        }
    }

    QZXing {
        id: decoder
        onDecodingStarted: console.log("decoding ...")
        onTagFound: capturedText.text = tag
        onDecodingFinished: console.log("decoding finished " + (succeeded===true ? "successfully" : "unsuccessfully") )
    }

    Camera {
        id: camera
        x: -80
        y: -32
        rotation: 90
        width:640
        height: 640
        focus: visible
        captureResolution : "1024x768"
        onImageCaptured : {
            imageToDecode.source = preview
            decoder.decodeImageQML(imageToDecode);
        }
    }

    Image{
        id: imageToDecode
        height: 360
        anchors.left: parent.left
        anchors.leftMargin: 0
        anchors.right: parent.right
        anchors.rightMargin: 0
        anchors.top: header.bottom
        anchors.topMargin: 0
        visible: false
    }

    Label {
        id:capturedText
        anchors.bottom: scanButton.top
        anchors.bottomMargin: 8
        anchors.horizontalCenter: parent.horizontalCenter
        font.pixelSize: 24
        font.weight: Font.Normal
        font.family: "Nokia Pure Text"
        color:"#333"
    }

    Button {
        id:scanButton
        text: "Scan"
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 16
        anchors.horizontalCenter: parent.horizontalCenter
        onClicked: {
            camera.captureImage();
        }
    }
}

Para finalizar una imagen del ejemplo funcionando.

QZXing Demo

Development , , , 2 responses

Presenting Jolla

November 21st, 2012

Mas información: Jolla.com, Sailfish OS

Announcements, Design, User Interface , No response

Firefox OS sigue avanzando

November 19th, 2012

Firefox OS

Ha pasado mucho tiempo desde la ultima vez que escribí acerca de Firefox OS, o B2G como era conocido anteriormente, el tiempo que ha pasado ha sido muy bien aprovechado por la Fundación Mozilla, tan solo hace falta ver el repositorio de github para darse cuenta la magnitud del progreso, pero no todo ha sido código, también la comunidad tanto de empresas como de colaboradores que giran en torno a Firefox OS esta creciendo y tomando forma.

Si realmente están interesados en Firefox OS, pero no han podido seguir su desarrollo detenidamente y quieren ponerse al día sobre el estado del proyecto les recomiendo ver los videos que se encuentran a continuación, donde podrán conocer los objetivos del proyecto, las APIs, el Marketplace y el ambiente de desarrollo y si desean comenzar a trabajar con el, pueden probar Firefox OS usando el nuevo Firefox OS Simulator el cual es una extensión .xpi para Firefox, o pueden usar la versión desktop de las nightly builds de Firefox OS.

Firefox OS – Introduction & Components

Download slides: Firefox OS introduction (PDF)

FirefoxOS – Developer Enviroment, Apps, Marketplace

FirefoxOS – WebAPIs & UI hacking

Download slides: Firefox OS – WebAPIs & UI hacking (PDF)


Design, Development, User Interface , , No response

Día J

October 6th, 2012

Fight for things, not against them

En estos últimos días se están comenzando a conocer con mayor detalle los planes a futuro que tiene Jolla, ya sabemos que un grupo de inversionistas a inyectado 200 millones de euros para potencia y acelerar el desarrollo del ecosistema que girara en torno a Sailfish, el nombre elegido por Jolla para su OS, también sabemos que la UI y el SDK serán presentados en el marco de la conferencia Slush que se realizara en Helsinki los días 21 y 22 de Noviembre y que el hardware en cambio recién sera presentado a finales de Diciembre.

Si están interesados en saber cual es la filosofía, los principios y las acciones que esta tomando Jolla para crear su ecosistema y su comunidad, les recomiendo vean la primera parte (45 min. aprox.) del siguiente video.

Announcements, Community, Events , , , No response

Master of Interaction

September 10th, 2012

Few people think about it or are aware of it. But there is nothing made by human beings that does not involve a design decision somewhere.

Bill Moggridge (1943 – 2012)

Design, Personal , No response