scandit-web-datacapture-core
Version:
Scandit Data Capture SDK for the Web
7 lines (4 loc) • 2.54 kB
JavaScript
import { a as a$1 } from './chunk-SP3HSP4K.js';
import { a } from './chunk-QCZSSQAQ.js';
var s=class i{constructor(){this.type="imageFrameSource";this._listeners=new Set;this._currentState="off";this._desiredState="off";this._context=null;this._imageData=null;}get desiredState(){return this._desiredState}get context(){return this._context}set context(e){this._context=e;}get currentState(){return this._currentState}static async fromFile(e){let t=URL.createObjectURL(e),r=new Image;r.src=t;try{await r.decode();}catch(a$1){throw new a({name:"InvalidImageError",message:"Submitted file is not an image"})}finally{URL.revokeObjectURL(t);}return i.fromImage(r)}static async fromImage(e){let t=new i;try{await e.decode();}catch(a$1){throw new a({name:"InvalidImageError",message:"Submitted image cannot be decoded"})}let r=t.getCanvasAndContext(e.width,e.height);return r.drawImage(e,0,0),t._imageData=r.getImageData(0,0,e.width,e.height,{colorSpace:"srgb"}),t}static async fromImageData(e){let t=new i,r=t.getCanvasAndContext(e.width,e.height);try{r.putImageData(e,0,0);}catch(a$1){throw new a({name:"InvalidImageError",message:`Submitted image data does not seem valid (details: ${a$1})`})}return t._imageData=e,t}async switchToDesiredState(e){if(e==="on"){if(this.currentState==="on")return}else if(this.currentState==="off")return;return this._desiredState=e,this._imageData==null?(a$1.log(a$1.Level.Warn,"No image data to process."),this.processSubmittedImage({data:new Uint8ClampedArray(0),width:0,height:0,colorSpace:"srgb"})):this.processSubmittedImage(this._imageData)}addListener(e){e!=null&&this._listeners.add(e);}removeListener(e){e!=null&&this._listeners.delete(e);}toJSONObject(){return {type:this.type}}getCurrentState(){return this._currentState}getCanvasAndContext(e,t){let r=document.createElement("canvas");r.width=e,r.height=t;let a$1=r.getContext("2d");if(a$1==null)throw new a({name:"ImageFrameSourceError",message:"Could not generate a canvas context to get image data"});return a$1}async setCurrentState(e){if(e!==this._currentState)return this._currentState=e,this.notifyListeners(),this.notifyContext({type:"frameSourceState",newValue:e})}async notifyContext(e){if(this._context)return this._context.update([e])}notifyListeners(){for(let e of this._listeners)e.didChangeState&&e.didChangeState(this,this.currentState);}async processSubmittedImage(e){var t;await this.setCurrentState("on"),await((t=this._context)==null?void 0:t.sendFrameToProcessor(e)),await this.setCurrentState("off");}};
export { s as a };