Skip to main content
Version: 4.1.1

Examples

Region of interest and Camera orientation

This example can be used to scan DOCUMENT in a portrait application:

Display display = getActivity().getWindowManager().getDefaultDisplay();
int stageWidth = display.getWidth();
int stageHeight = display.getHeight();
int width = stageWidth, height = stageHeight;
if(width > height)
// Set new ROI
mSmartScanner.setRegionOfInterest(new Rect(height / 100 * 15, width / 10, width / 100 * 95, height / 100 * 80));
else {
/**
* Set the new orientation decoding on the device. By activating this mode you must manage the ROI manually.
* @param forceOrientationEnabled true if the decoder should decode in manual orientation
* @param scanOrientation the orientation for decoding.The options are: LANDSCAPE_MODE, LANDSCAPE_REVERSE_MODE, PORTRAIT_MODE, PORTRAIT_REVERSE_MODE
*
*/
mSmartScanner.setOrientationDecoding(true, SmartScanner.LANDSCAPE_MODE);
mSmartScanner.setRegionOfInterest(new Rect(height / 100 * 10, width / 100 * 15, width / 100 * 85, height / 100 * 90));
}

Flash

This example shows how to enable/disable the flash using a toggle button:

...
someToggleButton.setOnCheckedChangeListener(flashModeLister);
...

private CompoundButton.OnCheckedChangeListener flashModeLister = new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mSmartScanner.setFlashEnabled(isChecked);
}
};

Auto-Focus

This example shows how to enable/disable the auto-focus using a toggle button:

...
someToggleButton.setOnCheckedChangeListener(focusModeLister);
...

private CompoundButton.OnCheckedChangeListener focusModeLister = new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mSmartScanner.setAutoFocusEnabled(isChecked);
}
};


Manual focus

This example shows how to manually focus by double-tapping on the screen.

Add a new rectangle shape to the drawable folder:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#00000000" />
<stroke
android:width="1dp"
android:color="#8BC34A" />
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
</shape>

Add a focus view to the main layout:

<View
android:id="@+id/focus"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
android:background="@drawable/rectangle" />

Switch to manual focus on double-tap event:

/**
* @param x Position along the x-axis on the screen
* @param y Position along the y-axis on the screen
* @param rectangleView View where the focus rectangle will be drawn
* @param isFocusRectangleVisible Option to show or hide the focus rectangle
*/

mSmartScanner.manualFocus(x, y, rectangleView, isFocusRectangleVisible);

Hight resolution

This example shows how to enable/disable the hight-resolution with a toggle button:

...
someToggleButton.setOnCheckedChangeListener(focusModeLister);
...

private CompoundButton.OnCheckedChangeListener focusModeLister = new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mSmartScanner.setHighResolution(isChecked);
}
};


Capture

This example shows how to capture the image seen by the decoder.

Add a view to display the image in the main layout:

<ImageView
android:id="@+id/picture_view"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:layout_gravity="center"/>
</LinearLayout>

Implement the OnSavedPictureReadyListener listener:

mSmartScanner.setOnSavedPictureReadyListener(pictureBytes -> {
if (pictureBytes != null) {
Bitmap bmp = BitmapFactory.decodeByteArray(pictureBytes, 0, pictureBytes.length);
((ImageView) findViewById(R.id.picture_view)).setImageBitmap(bmp);
}
});

Enable automatic capture when the image is successfully decoded:

/**
* If enabled, each successfully decoded image is saved and returned via the OnSavedPictureReadyListener listener
* @param enabled Set the state of the returned image
* @param onlyROI Set the area of the picture capture
*/
mSmartScanner.setOnLoadedListener(roi -> {
mSmartScanner.setSaveDecodedPictureEnabled(enabled, onlyRoi);
});

Or trigger a capture whenever you need it:

/**
* Take a picture of the scanning process
* @param onlyROI Set the area of the picture capture
*/
mSmartScanner.savePicture(onlyRoi)

Frame rate

This example shows how to set the ratio between decoded frames and ignored frames. By default, all images are decoded, but you can reduce energy consumption by adjusting this ratio.


/**
* Set ratio between processed frames and skipped frames
* By default all frames are processed
* @param processedFrameNumber number of successive frames send to decoder
* @param skippedFrameNumber number of successive frames skipped
*/
mSmartScanner.setOnLoadedListener(roi -> {
mSmartScanner.setProcessedFrameRate(int processedFrameNumber, int skippedFrameNumber)
});