在Android项目中使用zxing将字符串编码为图像
我正在尝试创建,它将显示一个QR编码的图像-通过使用 因此,我在我的Mac OS Yosemite笔记本上安装了在Android项目中使用zxing将字符串编码为图像,android,zxing,eclipse-adt,Android,Zxing,Eclipse Adt,我正在尝试创建,它将显示一个QR编码的图像-通过使用 因此,我在我的Mac OS Yosemite笔记本上安装了HomeBrew、ant和maven,并将ANDROID_HOME环境变量指向ANDROID SDK的位置 然后,我从GitHub签出了最新的zxing,并使用命令mvn package(并使用javacVersion1.8.045)构建了它(看起来没有任何错误) 在此之后,我在Eclipse中创建了一个新的Android项目,并将3个jar文件复制到其libs目录中: androi
HomeBrew
、ant
和maven
,并将ANDROID_HOME
环境变量指向ANDROID SDK的位置
然后,我从GitHub签出了最新的zxing,并使用命令mvn package
(并使用javac
Version1.8.045)构建了它(看起来没有任何错误)
在此之后,我在Eclipse中创建了一个新的Android项目,并将3个jar文件复制到其libs
目录中:
- android/libs/core-3.2.1-SNAPSHOT.jar
- android内核/target/android-core-3.2.1-SNAPSHOT.jar
- android/target/android-4.7.4.jar
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
String qrData = "Data I want to encode in QR code";
int qrCodeDimention = 500;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData,
null,
Contents.Type.TEXT,
BarcodeFormat.QR_CODE.toString(),
qrCodeDimention);
try {
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
错误如下(此处):
但同时,通过调用tar
tool,我可以看到这些类(可能不是Eclipse发现的):
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i WriterException
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/WriterException.class
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i BarcodeFormat
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/BarcodeFormat.class
# tar tvfz libs/android-4.7.4.jar | grep -i QRCodeEncoder
-rwxrwxrwx 0 0 0 0 28 Mai 20:39 com/google/zxing/client/android/encode/QRCodeEncoder.class
请问我做错了什么,为什么Eclipse找不到这些类
我也问了我的问题。好的,我通过查看以下内容解决了我的问题(从字符串生成QR编码图像): 这是我的:
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView ImageView=(ImageView)findViewById(R.id.qrCode);
试一试{
位图位图=编码为位图(STR);
设置图像位图(位图);
}捕获(写入异常e){
e、 printStackTrace();
}
}
位图encodeAsBitmap(字符串str)引发WriterException{
位矩阵结果;
试一试{
结果=新的多格式编写器()。编码(str,
条形码格式.QR_码,宽度,宽度,空);
}捕获(IllegalArgumentException iae){
//不支持的格式
返回null;
}
int w=result.getWidth();
int h=result.getHeight();
int[]像素=新的int[w*h];
对于(int y=0;y
此外,我还从(此处)获取了core.jar:
最后,Eclipse无法使用我用Maven构建的jar文件的最初问题来自Java版本,将在项目属性或Eclipse设置中修复:
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i WriterException
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/WriterException.class
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i BarcodeFormat
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/BarcodeFormat.class
# tar tvfz libs/android-4.7.4.jar | grep -i QRCodeEncoder
-rwxrwxrwx 0 0 0 0 28 Mai 20:39 com/google/zxing/client/android/encode/QRCodeEncoder.class
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
try {
Bitmap bitmap = encodeAsBitmap(STR);
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
Bitmap encodeAsBitmap(String str) throws WriterException {
BitMatrix result;
try {
result = new MultiFormatWriter().encode(str,
BarcodeFormat.QR_CODE, WIDTH, WIDTH, null);
} catch (IllegalArgumentException iae) {
// Unsupported format
return null;
}
int w = result.getWidth();
int h = result.getHeight();
int[] pixels = new int[w * h];
for (int y = 0; y < h; y++) {
int offset = y * w;
for (int x = 0; x < w; x++) {
pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, w, h);
return bitmap;
}