Overview
Once the BarcodeCaptureListener has been set up, the Scandit DataCapture SDK provides two events to extract images from a FrameData object:
-
didScan?(barcodeCapture:session:getFrameData:): invoked upon detecting a barcode. -
didUpdateSession?(barcodeCapture:session:getFrameData:): invoked upon every processed camera frame, regardless of detecting a barcode.
Then, ImageBuffer within the FrameData object can be decoded from a base64-encoded string to an image format supported by the platform or framework.
ℹ️ The FrameData feature is not supported across all platforms, frameworks, or SDK versions. Please refer to the "Camera Frame Access" section in the table below to check availability for your specific platform and SDK version.https://docs.scandit.com/features-by-framework/#camera |
iOS
The following code snippet shows how to convert FrameData to a UIImage using Swift with UIKit on iOS.
extension ViewController: BarcodeCaptureListener {
func barcodeCapture(
_ barcodeCapture: BarcodeCapture,
didScanIn session: BarcodeCaptureSession,
frameData: FrameData
) {
guard let image = frameData.imageBuffers[0].image else { return }
DispatchQueue.main.async {
self.imageView.image = image
}
}
}API Reference
Android
The following code snippet shows how to convert FrameData to a BitmapImage using Java on Android.
@Override
public void onBarcodeScanned(
@NonNull BarcodeCapture barcodeCapture,
@NonNull BarcodeCaptureSession session,
@NonNull FrameData frameData
) {
if (session.getNewlyRecognizedBarcodes().isEmpty()) return;
final Bitmap bitmap = frameData.toBitmap();
runOnUiThread(() -> bitmapViewer.setImageBitmap(bitmap));
}API Reference
Web
The following code snippet shows how to convert FrameData to an Image using TypeScript on Web.
import {
FrameData,
BarcodeCaptureListener,
BarcodeCapture,
BarcodeCaptureSession
} from '@scandit/web-datacapture-barcode';const barcodeCaptureListener: BarcodeCaptureListener = {
didScan: async (
_barcodeCapture: BarcodeCapture,
_session: BarcodeCaptureSession,
frameData: FrameData
) => {
try {
const blob = await frameData.toBlobAsync();
const imageUrl = URL.createObjectURL(blob);
const imgElement = document.querySelector<HTMLImageElement>('#preview');
if (imgElement) {
imgElement.src = imageUrl;
}
// Make sure to call `URL.revokeObjectURL(imageUrl);` to release the imageUrl dynamically
// https://developer.mozilla.org/en-US/docs/Web/API/File_API/Using_files_from_web_applications#using_object_urls
} catch (error) {
console.error('Error converting frame to image:', error);
}
}
};
barcodeCaptureMode.addListener(barcodeCaptureListener);<img id="preview" />API Reference
React Native
The following code snippet shows how to convert FrameData to an Image using TypeScript on React Native.
import {
FrameData,
BarcodeCaptureListener,
BarcodeCapture,
BarcodeCaptureSession
} from 'scandit-react-native-datacapture-barcode';const [imageUri, setImageUri] = useState<string | null>(null);const barcodeCaptureListener: BarcodeCaptureListener = {
didScan: async (
_barcodeCapture: BarcodeCapture,
_session: BarcodeCaptureSession,
getFrameData: () => Promise<FrameData>
) => {
const frameData = await getFrameData();
const imageBuffer = frameData.imageBuffers[0];
const imageUri = `data:image/png;base64,${imageBuffer.data}`;
setImageUri(imageUri);
};
};
barcodeCaptureMode.addListener(barcodeCaptureListener);<Image
source={{ uri: image }}
style={{ width: width * 0.3, height: height * 0.3 }}
/>API Reference
Capacitor
The following code snippet shows how to convert FrameData to an Image using TypeScript on Capacitor.
import {
BarcodeCapture,
BarcodeCaptureListener,
BarcodeCaptureSession,
Camera,
DataCaptureContext,
FrameData
} from 'scandit-capacitor-datacapture-core';const barcodeCaptureListener: BarcodeCaptureListener = {
didScan: async (
_barcodeCapture: BarcodeCapture,
_session: BarcodeCaptureSession,
frameData: FrameData
) => {
try {
const frameData = await getFrameData();
const imageBuffer = frameData.imageBuffers[0];
const base64Image = `data:image/png;base64,${imageBuffer.data}`;
const imgElement = document.querySelector<HTMLImageElement>('#preview');
if (imgElement) {
imgElement.src = base64Image;
}
} catch (error) {
console.error('Error converting frame to image:', error);
}
}
};
barcodeCaptureMode.addListener(barcodeCaptureListener);<img id="preview" />API Reference
Flutter
import 'package:scandit_flutter_datacapture_core/scandit_flutter_datacapture_core.dart';
import 'package:scandit_flutter_datacapture_barcode/scandit_flutter_datacapture_barcode.dart';String? imageUri;@override
Future<void> didScan(
BarcodeCapture barcodeCapture,
BarcodeCaptureSession session,
Future<FrameData> getFrameData,
) async {
try {
final frameData = await getFrameData;
final buffer = frameData.imageBuffers[0];
setState(() {
imageSource = base64Decode(buffer.data);
});
} catch (error) {
print('Error converting frame to image: $error');
}
}if (imageData != null)
Image.memory(
imageData!,
fit: BoxFit.contain
)API Reference
Xamarin
public void OnBarcodeScanned(
BarcodeCapture barcodeCapture,
BarcodeCaptureSession session,
IFrameData frameData
) {
try {
Image image = frameData.ImageBuffers[0].ToImage();
}
catch (Exception ex) {
Console.WriteLine($"Error converting frame to image: {ex.Message}");
}
}Xamarin.iOS API Reference
Xamarin.Android API Reference
Xamarin.Forms API Reference
.NET-iOS
public void OnBarcodeScanned(
BarcodeCapture barcodeCapture,
BarcodeCaptureSession session,
IFrameData frameData
) {
try {
UIImage image = frameData.ImageBuffers[0].ToImage();
}
catch (Exception ex) {
Console.WriteLine($"Error converting frame to image: {ex.Message}");
}
}.NET-iOS API Reference
.NET-Android
public void OnBarcodeScanned(
BarcodeCapture barcodeCapture,
BarcodeCaptureSession session,
IFrameData frameData
) {
try {
Bitmap image = frameData.ImageBuffers[0].ToImage();
}
catch (Exception ex) {
Console.WriteLine($"Error converting frame to image: {ex.Message}");
}
}.NET-Android API Reference