如何使摄像头扫描二维码,然后解析二维码 java源码 zxing
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使摄像头扫描二维码,然后解析二维码 java源码 zxing相关的知识,希望对你有一定的参考价值。
参考技术A import com.google.zxing.common.BitMatrix;import javax.imageio.ImageIO;
import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;
public final class MatrixToImageWriter
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
private MatrixToImageWriter()
public static BufferedImage toBufferedImage(BitMatrix matrix)
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++)
image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
return image;
public static void writeToFile(BitMatrix matrix, String format, File file)
throws IOException
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, file))
throw new IOException("Could not write an image of format " + format + " to " + file);
public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
throws IOException
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, stream))
throw new IOException("Could not write an image of format " + format);
本回答被提问者采纳
如何修改我的代码以使用前置摄像头扫描二维码
【中文标题】如何修改我的代码以使用前置摄像头扫描二维码【英文标题】:How I can modify my code to can use front camera for scanning QR code 【发布时间】:2020-03-05 00:22:44 【问题描述】:我正在使用 android vision 在我的应用中扫描二维码,一切正常,但现在我想让我的应用可以通过打开前置摄像头而不是后置摄像头来扫描二维码。
扫屏代码:
public class BarCodeScanActivity extends AppCompatActivity implements BarcodeReader.BarcodeReaderListener
private String TAG = OperatorBarCodeScanActivity.class.getSimpleName();
private Context mContext;
private View currentView;
private Activity currentactivity;
private BarcodeReader barcodeReader;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.barcode_reader_activity);
mContext = getApplicationContext();
barcodeReader = (BarcodeReader) getSupportFragmentManager().findFragmentById(R.id.barcode_scanner);
@Override
public void onScanned(Barcode barcode)
// playing barcode reader beep sound
barcodeReader.playBeep();
final String scannedCode = barcode.displayValue;
@Override
public void onScannedMultiple(List<Barcode> barcodes)
@Override
public void onBitmapScanned(SparseArray<Barcode> sparseArray)
@Override
public void onScanError(String errorMessage)
Toast.makeText(getApplicationContext(), mContext.getString(R.string.barcode_error)+" " + errorMessage, Toast.LENGTH_SHORT).show();
@Override
public void onCameraPermissionDenied()
finish();
此屏幕的布局如下所示:
<LinearLayout
android:visibility="visible"
android:id="@+id/scanningContainer"
android:layout_
android:layout_
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal"
android:orientation="vertical">
<fragment
android:id="@+id/barcode_scanner"
android:name="info.androidhive.barcode.BarcodeReader"
android:layout_
android:layout_
app:auto_focus="true"
app:use_flash="false" />
<info.androidhive.barcode.ScannerOverlay
android:layout_
android:layout_
app:line_color="@color/colorPrimary"
app:line_speed="6"
app:line_
app:square_
app:square_ />
</LinearLayout>
如何更新我的代码以使用 Camera Surface 然后调用前置摄像头?
谢谢。
【问题讨论】:
请发布您的BarcodeReader
片段。
@JakirHossain 我更新了我的帖子,请看一下
这高度依赖于您使用的条形码阅读器库。通过谷歌搜索“ change camera”来帮助自己,您应该会找到一些有用的答案。
【参考方案1】:
我为你做了谷歌搜索 - 这是你需要使用的方法:
https://github.com/ravi8x/Barcode-Reader/blob/master/barcode-reader/src/main/java/info/androidhive/barcode/camera/CameraSource.java#L237
不幸的是,BarcodeReader
片段没有公开此 API,因此您需要分叉它的实现并对其进行调整:
https://github.com/ravi8x/Barcode-Reader/blob/master/barcode-reader/src/main/java/info/androidhive/barcode/BarcodeReader.java#L251
考虑创建一个公共分叉,使此设置可配置并向原作者发布拉取请求,以便其他人也可以从您的扩展中受益。
【讨论】:
我已经用谷歌搜索了使用过的库,我已经看到了你发布的链接,我知道我应该使用 Camera Surface 的 CAMERA_FACING_FRONT 但我坚持如何做到这一点,但要尽可能地保持我的代码工作,我再试一次以上是关于如何使摄像头扫描二维码,然后解析二维码 java源码 zxing的主要内容,如果未能解决你的问题,请参考以下文章