所以我一直在尝试根据Google制作的条形码API制作应用程序并添加一些调整。我是一名学生,还在学习,所以我不知道接下来该做什么,也许你可以指出我正确的方向。
目前我有
private boolean onTap(float rawX, float rawY) {
mCameraSource.takePicture(null,null);
// Find tap point in preview frame coordinates.
int[] location = new int[2];
mGraphicOverlay.getLocationOnScreen(location);
float x = (rawX - location[0]) / mGraphicOverlay.getWidthScaleFactor();
float y = (rawY - location[1]) / mGraphicOverlay.getHeightScaleFactor();
// Find the barcode whose center is closest to the tapped point.
Barcode best = null;
float bestDistance = Float.MAX_VALUE;
for (BarcodeGraphic graphic : mGraphicOverlay.getGraphics()) {
Barcode barcode = graphic.getBarcode();
if (barcode.getBoundingBox().contains((int) x, (int) y)) {
// Exact hit, no need to keep looking.
best = barcode;
break;
}
float dx = x - barcode.getBoundingBox().centerX();
float dy = y - barcode.getBoundingBox().centerY();
float distance = (dx * dx) + (dy * dy); // actually squared distance
if (distance < bestDistance) {
best = barcode;
bestDistance = distance;
}
}
但是除了取出条形码之外,我还要保存整个图像,我尝试通过实现:mCameraSource.takePicture(null,null);
我该怎么办?
拍照方法:
public void takePicture(ShutterCallback shutter, PictureCallback jpeg) {
synchronized (mCameraLock) {
if (mCamera != null) {
PictureStartCallback startCallback = new PictureStartCallback();
startCallback.mDelegate = shutter;
PictureDoneCallback doneCallback = new PictureDoneCallback();
doneCallback.mDelegate = jpeg;
mCamera.takePicture(startCallback, null, null, doneCallback);
}
}
}
答案 0 :(得分:0)
正如the documentation中所述,takePicture
方法有2个参数。两者都是a callback
。
回调是接口的实现,其中方法将在某个时刻被提供的方法调用。 通常在方法异步时使用回调,因为您不知道何时获得结果,并且您无法阻止当前的Thread等待结果(否则进行异步调用毫无意义)。
示例强>
你有一个界面:
public interface Callback{
public void onResult(int value);
}
一种方法:
public void testMethod(Callback callback){
// Do something
}
在某些时候,该方法将在回调上调用onResult
public void testMethod(Callback callback){
// A lot of asynchronous calculation
// ...
callback.onResult(value);
}
所以当你调用方法时,你会这样做:
testMethod(new Callback(){
@Override
public void onResult(int value){
// Do something with the result;
}
});
或者您可以在变量中设置回调:
Callback cb = new Callback(){
@Override
public void onResult(int value){
// Do something with the result;
}
};
然后将其传递给方法:
testMethod(cb);
甚至创建一个实现接口的类(如果它是复杂的东西)。
我们的案例
所以基本上takePicture
的第二个回调的方法是“JPEG图像数据”作为参数。因此,您需要做的就是实现回调以获取数据,然后您可以使用它们执行任何操作。例如,您可以存储它们,将它们发送到API ...
mCameraSource.takePicture(null, new CameraSource.PictureCallback(){
@Override
public void onPictureTaken (byte[] data){
// Do something with the data (this is the JPEG image)
}
});