Kamerastrom bei Fehler freigeben, klare Meldung bei fehlenden Bildmassen
- startCamera: schlaegt play() fehl, werden Tracks gestoppt und srcObject geloest, bevor der Fehler weitergereicht wird (Kamera-LED erlischt statt dauerhaft aktiv zu bleiben). - grabFrame/imageDataFromFile: pruefen vor dem Verkleinern, ob Breite und Hoehe > 0 sind, und werfen sonst eine verstaendliche deutsche Meldung statt eines technischen Fehlers aus getImageData.
This commit is contained in:
+18
-1
@@ -15,7 +15,14 @@ export async function startCamera(videoElement) {
|
||||
|
||||
videoElement.srcObject = stream;
|
||||
videoElement.setAttribute('playsinline', '');
|
||||
await videoElement.play();
|
||||
|
||||
try {
|
||||
await videoElement.play();
|
||||
} catch (error) {
|
||||
for (const track of stream.getTracks()) track.stop();
|
||||
videoElement.srcObject = null;
|
||||
throw error;
|
||||
}
|
||||
|
||||
return {
|
||||
stop() {
|
||||
@@ -38,8 +45,17 @@ function drawScaled(source, sourceWidth, sourceHeight, maxEdge) {
|
||||
return context.getImageData(0, 0, width, height);
|
||||
}
|
||||
|
||||
function assertHasSize(width, height) {
|
||||
if (!(width > 0) || !(height > 0)) {
|
||||
throw new Error(
|
||||
'Das Kamerabild ist noch nicht bereit. Bitte gleich noch einmal versuchen.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/** Einzelbild aus dem laufenden Kamerastrom. */
|
||||
export function grabFrame(videoElement, maxEdge = 1280) {
|
||||
assertHasSize(videoElement.videoWidth, videoElement.videoHeight);
|
||||
return drawScaled(
|
||||
videoElement,
|
||||
videoElement.videoWidth,
|
||||
@@ -51,6 +67,7 @@ export function grabFrame(videoElement, maxEdge = 1280) {
|
||||
/** Ersatzweg ohne Kamera: Bilddatei auswaehlen (z. B. am Rechner). */
|
||||
export async function imageDataFromFile(file, maxEdge = 1280) {
|
||||
const bitmap = await createImageBitmap(file);
|
||||
assertHasSize(bitmap.width, bitmap.height);
|
||||
const data = drawScaled(bitmap, bitmap.width, bitmap.height, maxEdge);
|
||||
bitmap.close();
|
||||
return data;
|
||||
|
||||
Reference in New Issue
Block a user