0

私は開発用のG1を所有していないので、エミュレーターで最善を尽くしています。そうは言っても、ZXing(Zebra Zrossing)ライブラリを使用して、SDカード内のJPEG画像またはPNG画像をスキャンしようとしています。

Androidプロジェクトのコードを変更しようとしたので、運が悪ければ、カメラからではなく、sdCardの画像からスキャンされました。

次にやったことは、おそらく私の問題の根源です。

新しいAndroidプロジェクト内でJAVASEコードを使用して、「変更された」CommandLineRunnerに画像を提供しようとしましたが、次のようになります。

Eclipseはプロジェクトをビルドしますが、実行しません。VMログには、特に次のメッセージが表示されます。

** 02-08 20:47:45.916:WARN / dalvikvm(619):VFY:静的メソッド939を解決できません:Ljavax / imageio / ImageIO; .read(Ljava / io / File;)Ljava / awt / image / BufferedImage ; 02-08 20:47:45.926:WARN / dalvikvm(619):VFY:0x0004でオペコード0x71を拒否します02-08 20:47:45.926:WARN / dalvikvm(619):VFY:拒否されたLcom / magoco / fread / FRead; .decode2(Ljava / io / File; Ljava / util / Hashtable; Ljava / lang / String;)Ljava / lang / String; 02-08 20:47:45.926:警告/ dalvikvm(619):ベリファイアはクラスLcom / magoco / fread/FReadを拒否しました。02-08 20:47:45.926:警告/ dalvikvm(619):クラスの初期化がnewInstance呼び出しで失敗しました(Lcom / magoco / fread / FRead;)02-08 20:47:45.926:DEBUG / AndroidRuntime(619):シャットダウンVM 02-08 20:47:45.926:警告/ dalvikvm(619):threadid = 3:キャッチされない例外でスレッドが終了します(group = 0x40010e28)02-08 20:47:45.937:エラー/ AndroidRuntime(619):キャッチされないハンドラー:

Webで回答を検索したところ、プリコンパイルされたクラスまたはライブラリが存在する可能性があり(true、Eclipseの外部)、VMが使用できないため、これはDalvikvmで一般的なエラーであるとの回答がありました。それを使用します。

メインのアクティビティにコードを投稿しています:

package com.magoco.fread;

import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.TextView;

import com.google.zxing.DecodeHintType;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.result.ParsedResult;
import com.google.zxing.client.result.ResultParser;

public class FRead extends Activity {
    /** Called when the activity is first created. */
    @Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView tv = (TextView) this.findViewById(R.id.BarcodeResult);
    try {
        tv.setText(this.decodeOneArgument2("", false));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public String decodeOneArgument2(String argument, boolean dumpResults)
        throws Exception {
    String barcode = "";
    // File inputFile = new File(argument);
    File inputFile = new File("sdcard/dcim/pueblo.JPG");

    /* TESTING THAT I'VE GOT A FILE */
    System.out.println("FILE " + inputFile.toString());

    // decode(new URI(argument), hints);
    decode2(inputFile, null, barcode);
    return barcode;

}

public String decode2(File f, Hashtable<DecodeHintType, Object> hints,
        String barcode) throws IOException {

    /* IF I COMMENT THE NEXT LINE, IT RUNS BUT OF COURSE NO RESULT */
    BufferedImage image;
    try {
        image = ImageIO.read(f);
    } catch (IllegalArgumentException iae) {
        throw new FileNotFoundException("Resource not found: " + f);
    }
    try {
        MonochromeBitmapSource source = new BufferedImageMonochromeBitmapSource(
                image);
        Result result = new MultiFormatReader().decode(source, hints);
        ParsedResult parsedResult = ResultParser.parseResult(result);
        barcode = " format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult();
        System.out.println(" format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult());
        //return result;
    } catch (ReaderException e) {
        System.out.println(": No barcode found");
        return null;
    }
    return barcode;
}

}

前もって感謝します

monn3t

4

2 に答える 2

1

はい、バーコードからデータを抽出しようとしましたが、これらは私が従った手順です。

1.ZXing 1.3 をダウンロードして展開します。

2.プロパティを設定して、抽出した zxing floder から core/src と androidtest/src を android アプリケーションに追加します。このリンクを使用してプロパティを設定します: http://groups.google.com/group/zxing/browse_thread/thread/7d8693e6e42408f2

次のコードを含めます。

package payoda.android.zxingApp;
import android.app.Activity;
import android.database.CursorJoiner.Result;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.qrcode.QRCodeReader;
import com.google.zxing.client.androidtest.*;
import com.google.zxing.common.BaseMonochromeBitmapSource;


public class ZXingApplication1 extends Activity 
{
  TextView tv;
  com.google.zxing.Result result;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv=(TextView)findViewById(R.id.text);
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bar2); 
    MultiFormatReader reader1=new MultiFormatReader();//For all barcode formats
    QRCodeReader reader=new QRCodeReader();//Only for QRCode format

   try 
    {

       result=reader1.decode(new RGBMonochromeBitmapSource(bitmap));
       tv.setText(result.getText());
    } 
    catch (Exception e) 
    {   
        tv.setText("Within Catch block");
     } 
  }
 }

これはあなたを助けるかもしれません。

于 2009-08-17T10:01:48.953 に答える
0

問題のプロジェクトのショーンです。

Android で Java SE 向けのコードを使用しようとしています。ImageIO のように、Java SE の一部のライブラリは Android にはありません。

Android 固有のクラスを使用して画像をロードする android/ のコードを見てください。

于 2009-02-09T13:32:50.120 に答える