export interface IToImageDataOptions { width?: number height?: number sx?: number sy?: number sw?: number sh?: number } /** 转换到 ImageData */ export function toImageData(drawable: ImageBitmap | HTMLImageElement, opts: IToImageDataOptions = {}): ImageData { let canvas!: HTMLCanvasElement let ctx!: CanvasRenderingContext2D const { width = getWidth(drawable), height = getHeight(drawable), sx = 0, sy = 0, sw = getWidth(drawable), sh = getHeight(drawable), } = opts if (!canvas) { canvas = document.createElement("canvas") ctx = canvas.getContext("2d") if (!ctx) throw new Error("Could not create canvas context") } canvas.width = width canvas.height = height ctx.clearRect(0, 0, canvas.width, canvas.height) ctx.drawImage(drawable, sx, sy, sw, sh, 0, 0, width, height) return ctx.getImageData(0, 0, width, height) } function getWidth(drawable: ImageBitmap | HTMLImageElement): number { if ("displayWidth" in drawable) { return (drawable).displayWidth } return drawable.width } function getHeight(drawable: ImageBitmap | HTMLImageElement): number { if ("displayHeight" in drawable) { return (drawable).displayHeight } return drawable.height }