Autore Topic: Metodo per decodificare qrcode  (Letto 1791 volte)

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Metodo per decodificare qrcode
« il: 28 Novembre 2011, 16:02:01 CET »
0
Allora ragazzi girando sul forum ho trovato questo codice per richiamare la fotocamera, l'ho anche un pò modificato, lo scopo della mia app è quello di decodificare i qrcode, quindi vorrei sapere quale metodo della classe zxing devo usare per decodificare l'immagine che fotografo, in secondo luogo esiste un metodo per passare direttamente l'anteprima della fotocamera invece di salvare l'imagine sulla root??

Codice (Java): [Seleziona]
package com.tutorial.camera;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.os.Environment;
//import android.util.Log;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class CameraView extends Activity implements SurfaceHolder.Callback{
       
/* VARIABILI PRIVATE */
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;
//private GregorianCalendar temp = new GregorianCalendar();
private String nameFile="qrcode.jpg";
private int i= 0;
private String contatore;

/** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState) {
               
        super.onCreate(savedInstanceState);
        getWindow().setFormat(PixelFormat.TRANSLUCENT); //aggiungo il traslucido
        requestWindowFeature(Window.FEATURE_NO_TITLE);  //no barra titolo
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);   //full screen
        setContentView(R.layout.main);
        ImageButton buttonPicture = (ImageButton) findViewById(R.id.camera_surface_button);
                buttonPicture.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {
                                        i++;
                                        contatore=Integer.toString(i);
                                       
                                mCamera.takePicture(null, null, jpegCallback);
                                nameFile = "qrcode" + contatore + ".jpg";
                        }
                });
               
        mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
        mSurfaceHolder = mSurfaceView.getHolder();      //recupero l'holder della surfaceview
        mSurfaceHolder.addCallback(this);       //faccio la bind alla nostra activity
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//tipo di surface, suggerito nei tutorial ufficiali
    }
   
   
   
    PictureCallback jpegCallback = new PictureCallback() {
                public void onPictureTaken(byte[] _data, Camera _camera) {
                       
                        //File sdImageMainDirectory = new File("/sdcard");
                    File root=Environment.getExternalStorageDirectory();
                   
                   
                    File img=new File(root,nameFile);
       
                    try {
                        //BitmapFactory.Options options=new BitmapFactory.Options();
                        //options.inSampleSize = 1;                  
                        BitmapFactory.decodeByteArray(_data,0,_data.length).compress(CompressFormat.JPEG, 100, new FileOutputStream(img));

                         
                    } catch (FileNotFoundException e) {
                        Log.e("demo", e.toString());
                    }
                        //riparte la preview della camera
                        mCamera.startPreview();
                       
                }
        };

        @Override
        public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
                if (mPreviewRunning)
                        mCamera.stopPreview();
               
                //setto le preferenze
                Camera.Parameters p = mCamera.getParameters();  //prendo le preferenze della camera
                p.setPreviewSize(arg2, arg3);
                ArrayList<Size> list = (ArrayList<Size>) p.getSupportedPictureSizes();//recuepro le risoluzioni supportate dalla camera
        int picture_width = list.get(list.size()-1).width;
        int picture_height = list.get(list.size()-1).height;
        p.setPictureSize(picture_width, picture_height);        //setto la camera alla risoluzione più bassa
        p.setJpegQuality(80);   // qualità compressione JPEG
       
        // salvo le pref
        mCamera.setParameters(p);
        try {
                //lancio la preview
                        mCamera.setPreviewDisplay(arg0);        
                        mCamera.startPreview();
                        mPreviewRunning = true;
                } catch (IOException e) {
                        //gestione errore
                }
       
               
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
                mCamera = Camera.open();
               
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mPreviewRunning = false;
        mCamera.release();
               
        }
}

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Metodo per decodificare qrcode
« Risposta #1 il: 28 Novembre 2011, 17:13:40 CET »
+1
Non è facile prendere direttamente i dati dalla fotocamera.

La camera deve essere attiva in una superficie di preview, bisogna impostare una callback  con il metodo "setOneShotPreviewCallback" per una immagine singola o il metodo "setPreviewCallback" per un flusso continuo d'immagini. La callback deve segnalare la presenza dei dati ad un thread di lavoro. I dati dell'immagine sono grezzi e sono in YUV420. La conversione YUV420 in RGA se fatta direttamente in Java è molto lenta. Una volta finita la conversione in RGB sono pronti per altre elaborazioni.

I metodi citati sono documentati nella classe "Camera":

Camera | Android Developers

Non ho trovato un metodo più semplice con API attuale di Android.
adb logcat | tee /tmp/logcat | grep TAG

Offline Download

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
Re:Metodo per decodificare qrcode
« Risposta #2 il: 02 Dicembre 2011, 15:43:22 CET »
0
Ciao, questi sono 3 dei metodi che ho utilizzato io nella mia App.
Dovresti poterli integrare facilmente nella tua. Ricordati di importare il package di zxing e di aggiungere le reference.
Spero di esserti stato d'aiuto, per chiarimenti sul codice chiedi pure :)

Codice (Java): [Seleziona]
public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener{
.
.
.
.  
    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
                public void onPictureTaken(byte[] imageData, Camera c) {
               
                        if (imageData != null) {
               
                                Intent mIntent = new Intent();
               
                                decodeImage(mContext, imageData);
                                mCamera.startPreview();
                                setResult(FOTO_MODE, mIntent); 
                        }
                }};    

        public boolean decodeImage(Context mContext, byte[] imageData) {
                Reader reader = new MultiFormatReader();
                try {
                        BitmapFactory.Options options=new BitmapFactory.Options();
                        options.inSampleSize = 5;
                       
                        Bitmap myImage = toGrayscale(BitmapFactory.decodeByteArray(imageData, 0, imageData.length,options));
                        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
                        hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
                        String text = "";
                        boolean deco = false;
                                try{
                               
                                Result result = reader.decode(new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(myImage))),hints);
                                text = result.getText();
                                BarcodeFormat format = result.getBarcodeFormat();
                                ResultPoint[] points = result.getResultPoints();
                                Log.d(TAG,"Risultato: "+ text + " \nFormato: " + format.toString() + " \n ResultPoints: " + points.toString());
                                deco = true;
                                } catch(Exception ex){
                                        Log.d(TAG,"Eccezione in decodifica.");
                                       
                                }
                        if(!deco){
                                //showToast("Immagine non adatta alla decodifica.",4000);
                        }
                        else{
                                boolean contiene = false;
                                if(contiene = text.contains("http://")){ //controllo se è un url e apro il browser
                                Uri uriUrl = Uri.parse(text);
                                Log.d(TAG,"La stringa : \"" + text + "\" è un url.");
                                Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
                                mContext.startActivity(launchBrowser);
                                }
                                else{
                                        //showToast(text,2000); //mostro un popup per vedere il contenuto se non è un url
                                }
                                Log.d(TAG, "Valore contiene : " + contiene);
                        }
                } catch (Exception ex) {
                        ex.printStackTrace();
                }
                return true;
        }

//ottimizzo l'immagine in scala di grigi in modo da renderla migliore per la lettura del barcode
        public Bitmap toGrayscale(Bitmap bmpOriginal){        
            int width, height;
            height = bmpOriginal.getHeight();
            width = bmpOriginal.getWidth();    

            Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
            Canvas c = new Canvas(bmpGrayscale);
            Paint paint = new Paint();
            ColorMatrix cm = new ColorMatrix();
            cm.setSaturation(0);
            ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
            paint.setColorFilter(f);
            c.drawBitmap(bmpOriginal, 0, 0, paint);
            return bmpGrayscale;
        }

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:Metodo per decodificare qrcode
« Risposta #3 il: 02 Dicembre 2011, 20:12:51 CET »
0
Ciao, questi sono 3 dei metodi che ho utilizzato io nella mia App.
Dovresti poterli integrare facilmente nella tua. Ricordati di importare il package di zxing e di aggiungere le reference.
Spero di esserti stato d'aiuto, per chiarimenti sul codice chiedi pure :)

Codice (Java): [Seleziona]
public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener{
.
.
.
.  
    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
                public void onPictureTaken(byte[] imageData, Camera c) {
               
                        if (imageData != null) {
               
                                Intent mIntent = new Intent();
               
                                decodeImage(mContext, imageData);
                                mCamera.startPreview();
                                setResult(FOTO_MODE, mIntent); 
                        }
                }};    

        public boolean decodeImage(Context mContext, byte[] imageData) {
                Reader reader = new MultiFormatReader();
                try {
                        BitmapFactory.Options options=new BitmapFactory.Options();
                        options.inSampleSize = 5;
                       
                        Bitmap myImage = toGrayscale(BitmapFactory.decodeByteArray(imageData, 0, imageData.length,options));
                        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
                        hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
                        String text = "";
                        boolean deco = false;
                                try{
                               
                                Result result = reader.decode(new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(myImage))),hints);
                                text = result.getText();
                                BarcodeFormat format = result.getBarcodeFormat();
                                ResultPoint[] points = result.getResultPoints();
                                Log.d(TAG,"Risultato: "+ text + " \nFormato: " + format.toString() + " \n ResultPoints: " + points.toString());
                                deco = true;
                                } catch(Exception ex){
                                        Log.d(TAG,"Eccezione in decodifica.");
                                       
                                }
                        if(!deco){
                                //showToast("Immagine non adatta alla decodifica.",4000);
                        }
                        else{
                                boolean contiene = false;
                                if(contiene = text.contains("http://")){ //controllo se è un url e apro il browser
                                Uri uriUrl = Uri.parse(text);
                                Log.d(TAG,"La stringa : \"" + text + "\" è un url.");
                                Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
                                mContext.startActivity(launchBrowser);
                                }
                                else{
                                        //showToast(text,2000); //mostro un popup per vedere il contenuto se non è un url
                                }
                                Log.d(TAG, "Valore contiene : " + contiene);
                        }
                } catch (Exception ex) {
                        ex.printStackTrace();
                }
                return true;
        }

//ottimizzo l'immagine in scala di grigi in modo da renderla migliore per la lettura del barcode
        public Bitmap toGrayscale(Bitmap bmpOriginal){        
            int width, height;
            height = bmpOriginal.getHeight();
            width = bmpOriginal.getWidth();    

            Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
            Canvas c = new Canvas(bmpGrayscale);
            Paint paint = new Paint();
            ColorMatrix cm = new ColorMatrix();
            cm.setSaturation(0);
            ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
            paint.setColorFilter(f);
            c.drawBitmap(bmpOriginal, 0, 0, paint);
            return bmpGrayscale;
        }
grazie mille appena ho tempo provo tutto, volevo sapere un altra cosa, alla fine l'app per funzionare correttamente sui telefoni, deve essere pre-installata l'app barcode scanner o qrscanner non so come si chiami, perchè da qualche parte avevo letto una cosa del genere...

Offline Download

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
Re:Metodo per decodificare qrcode
« Risposta #4 il: 02 Dicembre 2011, 22:58:16 CET »
0
Quella é una delle possibilità, via intent richiami l'app e l'intent ti ritorna una stringa di risultato. io invece ho preferito fare un app standalone scaricandomi il core per adnroid senza dover dipendere dall'app Barcode (può risultare scomodo per l'utente), anche perché se fai un app che legge i qr code basandosi su un app che legge tutti i Barcode e l'utente deve scaricarla, l'utente stesso finirà, probabilmente, ad usare Barcode invece della tua.

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:Metodo per decodificare qrcode
« Risposta #5 il: 06 Dicembre 2011, 12:34:56 CET »
0
Quella é una delle possibilità, via intent richiami l'app e l'intent ti ritorna una stringa di risultato. io invece ho preferito fare un app standalone scaricandomi il core per adnroid senza dover dipendere dall'app Barcode (può risultare scomodo per l'utente), anche perché se fai un app che legge i qr code basandosi su un app che legge tutti i Barcode e l'utente deve scaricarla, l'utente stesso finirà, probabilmente, ad usare Barcode invece della tua.
ciao ho fatto svariati tentativi, ma il codice che mi hai passato non mi riconosce determinati oggetti, prosti riscriverlo con sopra i pacchetti che servono importare???

Offline Download

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
Re:Metodo per decodificare qrcode
« Risposta #6 il: 06 Dicembre 2011, 17:03:11 CET »
0
ciao ho fatto svariati tentativi, ma il codice che mi hai passato non mi riconosce determinati oggetti, prosti riscriverlo con sopra i pacchetti che servono importare???

Gli oggetti in questione devono essere importati. Per importarli devi aggiungere le classi del pacchetto zxing al tuo progetto o all'ambiente. Una volta integrate le librerie zxing (o se hai già integrato tutto), se hai eclipse basta andare con il puntatore del mouse sull'oggetto sottolineato di rosso, attendere il popup e fare "Import <libreria>..."
Se mi dici quali sono i "determinati oggetti" ti posto gli import, ma se non hai integrato zxing non potrà importare niente.

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:Metodo per decodificare qrcode
« Risposta #7 il: 06 Dicembre 2011, 19:34:54 CET »
0
Gli oggetti in questione devono essere importati. Per importarli devi aggiungere le classi del pacchetto zxing al tuo progetto o all'ambiente. Una volta integrate le librerie zxing (o se hai già integrato tutto), se hai eclipse basta andare con il puntatore del mouse sull'oggetto sottolineato di rosso, attendere il popup e fare "Import <libreria>..."
Se mi dici quali sono i "determinati oggetti" ti posto gli import, ma se non hai integrato zxing non potrà importare niente.
ho integrato la libreria zxing al progetto, solo che mi da errore gli oggetti "Camera.PictureCallback", "MultiFormatReader", "DecodeHintType", "BinaryBitmap", "HybridBinarizer", "RGBLuminanceSource", "BarcodeFormat","ResultPoint" ed ho importato i seguenti pacchetti:

import java.io.Reader;
import java.util.Hashtable;
import com.google.zxing.*;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.CursorJoiner.Result;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Camera;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.net.Uri;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.View.OnClickListener;

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:Metodo per decodificare qrcode
« Risposta #8 il: 07 Dicembre 2011, 10:00:20 CET »
0
Ecco come ho integrato i metodi che mi hai dato forse ho sbagliato qualcosa....


Codice (Java): [Seleziona]
package com.tutorial.camera;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Hashtable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import android.*;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Interpolator.Result;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
//import android.util.Log;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import com.google.zxing.*;

public class CameraView extends Activity implements SurfaceHolder.Callback{
       
/* VARIABILI PRIVATE */
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;
//private GregorianCalendar temp = new GregorianCalendar();
private String nameFile="qrcode.jpg";
private int i= 0;
private String contatore;

/** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState) {
               
        super.onCreate(savedInstanceState);
        getWindow().setFormat(PixelFormat.TRANSLUCENT); //aggiungo il traslucido
        requestWindowFeature(Window.FEATURE_NO_TITLE);  //no barra titolo
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);   //full screen
        setContentView(R.layout.main);
        ImageButton buttonPicture = (ImageButton) findViewById(R.id.camera_surface_button);
                buttonPicture.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {
                                        i++;
                                        contatore=Integer.toString(i);
                                       
                                mCamera.takePicture(null, null, jpegCallback);
                                nameFile = "qrcode" + contatore + ".jpg";
                        }
                });
               
        mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
        mSurfaceHolder = mSurfaceView.getHolder();      //recupero l'holder della surfaceview
        mSurfaceHolder.addCallback(this);       //faccio la bind alla nostra activity
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//tipo di surface, suggerito nei tutorial ufficiali
    }
   
   
   
    PictureCallback jpegCallback = new PictureCallback() {
                public void onPictureTaken(byte[] _data, Camera _camera) {
                       
                        //File sdImageMainDirectory = new File("/sdcard");
                    File root=Environment.getExternalStorageDirectory();
                   
                   
                    File img=new File(root,nameFile);
       
                    try {
                        //BitmapFactory.Options options=new BitmapFactory.Options();
                        //options.inSampleSize = 1;                  
                        BitmapFactory.decodeByteArray(_data,0,_data.length).compress(CompressFormat.JPEG, 100, new FileOutputStream(img));

                         
                    } catch (FileNotFoundException e) {
                        Log.e("demo", e.toString());
                    }
                        //riparte la preview della camera
                        mCamera.startPreview();
                       
                }
        };

        @Override
        public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
                if (mPreviewRunning)
                        mCamera.stopPreview();
               
                //setto le preferenze
                Camera.Parameters p = mCamera.getParameters();  //prendo le preferenze della camera
                p.setPreviewSize(arg2, arg3);
                ArrayList<Size> list = (ArrayList<Size>) p.getSupportedPictureSizes();//recuepro le risoluzioni supportate dalla camera
        int picture_width = list.get(list.size()-1).width;
        int picture_height = list.get(list.size()-1).height;
        p.setPictureSize(picture_width, picture_height);        //setto la camera alla risoluzione più bassa
        p.setJpegQuality(80);   // qualità compressione JPEG
       
        // salvo le pref
        mCamera.setParameters(p);
        try {
                //lancio la preview
                        mCamera.setPreviewDisplay(arg0);        
                        mCamera.startPreview();
                        mPreviewRunning = true;
                } catch (IOException e) {
                        //gestione errore
                }
       
               
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
                mCamera = Camera.open();
               
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mPreviewRunning = false;
        mCamera.release();
               
        }
        Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
            public void onPictureTaken(byte[] imageData, Camera c) {
           
                    if (imageData != null) {
           
                            Intent mIntent = new Intent();
           
                            decodeImage(mContext, imageData);
                            mCamera.startPreview();
                            setResult(FOTO_MODE, mIntent);  
                    }
            }};    

    public boolean decodeImage(Context mContext, byte[] imageData) {
            Reader reader = new MultiFormatReader();
            try {
                    BitmapFactory.Options options=new BitmapFactory.Options();
                    options.inSampleSize = 5;
                   
                    Bitmap myImage = toGrayscale(BitmapFactory.decodeByteArray(imageData, 0, imageData.length,options));
                    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
                    hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
                    String text = "";
                    boolean deco = false;
                            try{
                           
                            Result result = reader.decode(new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(myImage))),hints);
                            text = result.getText();
                            BarcodeFormat format = result.getBarcodeFormat();
                            ResultPoint[] points = result.getResultPoints();
                            Log.d(TAG,"Risultato: "+ text + " \nFormato: " + format.toString() + " \n ResultPoints: " + points.toString());
                            deco = true;
                            } catch(Exception ex){
                                    Log.d(TAG,"Eccezione in decodifica.");
                                   
                            }
                    if(!deco){
                            //showToast("Immagine non adatta alla decodifica.",4000);
                    }
                    else{
                            boolean contiene = false;
                            if(contiene = text.contains("http://")){ //controllo se è un url e apro il browser
                            Uri uriUrl = Uri.parse(text);
                            Log.d(TAG,"La stringa : \"" + text + "\" è un url.");
                            Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
                            mContext.startActivity(launchBrowser);
                            }
                            else{
                                    //showToast(text,2000); //mostro un popup per vedere il contenuto se non è un url
                            }
                            Log.d(TAG, "Valore contiene : " + contiene);
                    }
            } catch (Exception ex) {
                    ex.printStackTrace();
            }
            return true;
    }

//ottimizzo l'immagine in scala di grigi in modo da renderla migliore per la lettura del barcode
    public Bitmap toGrayscale(Bitmap bmpOriginal){        
        int width, height;
        height = bmpOriginal.getHeight();
        width = bmpOriginal.getWidth();    

        Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        Canvas c = new Canvas(bmpGrayscale);
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);
        ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
        paint.setColorFilter(f);
        c.drawBitmap(bmpOriginal, 0, 0, paint);
        return bmpGrayscale;
    }
}

Offline Download

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
Re:Metodo per decodificare qrcode
« Risposta #9 il: 07 Dicembre 2011, 14:54:41 CET »
0
Prova a inserire gli import singoli per ogni oggetto, questi dovrebbero essere tutti:

Codice (Java): [Seleziona]
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Reader;
import com.google.zxing.Result;
import com.google.zxing.ResultPoint;
import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:Metodo per decodificare qrcode
« Risposta #10 il: 07 Dicembre 2011, 15:18:38 CET »
0
Prova a inserire gli import singoli per ogni oggetto, questi dovrebbero essere tutti:

Codice (Java): [Seleziona]
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Reader;
import com.google.zxing.Result;
import com.google.zxing.ResultPoint;
import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

nessuno dei tanti import viene riconosciuto me sa che ho importato male la libreria zxing, tu come i fatto a importarla?

Offline Download

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
Re:Metodo per decodificare qrcode
« Risposta #11 il: 07 Dicembre 2011, 15:25:18 CET »
0
Basta copiare nella directory "workspace/<nomeprogetto>/" le cartelle del core e relative ad android di zxing
in modo tale da avere il namespace com.google.zxing (aggiornando il progetto o riavviando eclipse).
Oppure trascinando le cartelle direttamente in eclipse nella tree list, sopra la cartella "src".

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:Metodo per decodificare qrcode
« Risposta #12 il: 07 Dicembre 2011, 18:24:37 CET »
0
Basta copiare nella directory "workspace/<nomeprogetto>/" le cartelle del core e relative ad android di zxing
in modo tale da avere il namespace com.google.zxing (aggiornando il progetto o riavviando eclipse).
Oppure trascinando le cartelle direttamente in eclipse nella tree list, sopra la cartella "src".

ho creato un nuovo progetto per fare una prova e mettendo le cartelle dentro il progetto non riconosce niente....potresti fare un video, una guida dettagliata oppure proprio il progetto magari ne crei un altro mi ci metti solo questa classe...