diff --git a/lib/src/artist.ts b/lib/src/artist.ts index 83bb77b..415a3ca 100644 --- a/lib/src/artist.ts +++ b/lib/src/artist.ts @@ -155,7 +155,7 @@ export class Artist { this._context.restore(); } - drawImage(source: HTMLImageElement, position: IPoint, size: ISize) { + drawImageElement(source: HTMLImageElement, position: IPoint, size: ISize) { this._context.save(); const scaleY = size.height / source.naturalHeight; const scaleX = size.width / source.naturalWidth; @@ -167,7 +167,7 @@ export class Artist { this._context.restore(); } - drawImage2(source: ImageBitmap, position: IPoint, size: ISize) { + drawImageBitmap(source: ImageBitmap, position: IPoint, size: ISize) { this._context.save(); const scaleY = size.height / source.height; const scaleX = size.width / source.width; @@ -179,6 +179,20 @@ export class Artist { this._context.restore(); } + drawImageData(source: ImageData, position: IPoint, size: ISize) { + const osc = new OffscreenCanvas(source.width, source.height).getContext("2d"); + osc.putImageData(source, 0, 0); + this._context.save(); + const scaleY = size.height / source.height; + const scaleX = size.width / source.width; + + this._context.translate(position.x + size.width / 2, position.y + size.height / 2); + this._context.scale(scaleY, scaleX); + + this._context.drawImage(osc.canvas, -source.width / 2, -source.height / 2); + this._context.restore(); + } + drawPath(path: string) { const path2d = new Path2D(path); this._context.stroke(path2d); diff --git a/lib/src/canvas-2d-renderer.ts b/lib/src/canvas-2d-renderer.ts index 9d99920..4dc3912 100644 --- a/lib/src/canvas-2d-renderer.ts +++ b/lib/src/canvas-2d-renderer.ts @@ -93,13 +93,19 @@ export class Canvas2DRenderer implements IRenderer { this._artist.setTransform(dn.transform); if (dn.source instanceof HTMLImageElement) { - this._artist.drawImage( + this._artist.drawImageElement( dn.source, { x: dn.rectangle.x, y: dn.rectangle.y }, { width: dn.rectangle.width, height: dn.rectangle.height }, ); } else if (dn.source instanceof ImageBitmap) { - this._artist.drawImage2( + this._artist.drawImageBitmap( + dn.source, + { x: dn.rectangle.x, y: dn.rectangle.y }, + { width: dn.rectangle.width, height: dn.rectangle.height }, + ); + } else if (dn.source instanceof ImageData) { + this._artist.drawImageData( dn.source, { x: dn.rectangle.x, y: dn.rectangle.y }, { width: dn.rectangle.width, height: dn.rectangle.height }, diff --git a/lib/src/index.ts b/lib/src/index.ts index e69de29..ef7fef4 100644 --- a/lib/src/index.ts +++ b/lib/src/index.ts @@ -0,0 +1 @@ +export * from "./canvas-2d-renderer"; diff --git a/lib/src/package.json b/lib/src/package.json index 0f06800..ca36b33 100644 --- a/lib/src/package.json +++ b/lib/src/package.json @@ -1,6 +1,6 @@ { "name": "@gxc-solutions/renderer-canvas-2d", - "version": "0.0.4", + "version": "0.0.5", "main": "index.js", "author": "GXC Solutions", "publishConfig": { @@ -8,7 +8,7 @@ "registry": "https://npm.gxc-solutions.ru" }, "peerDependencies": { - "@gxc-solutions/math": "^0.0.2", - "@gxc-solutions/renderer-base": "^0.0.10" + "@gxc-solutions/math": "^0.0.3", + "@gxc-solutions/renderer-base": "^0.0.11" } } diff --git a/package-lock.json b/package-lock.json index a8c17d2..4856161 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "0.0.0", "license": "ISC", "dependencies": { - "@gxc-solutions/math": "^0.0.2", - "@gxc-solutions/renderer-base": "^0.0.10" + "@gxc-solutions/math": "^0.0.3", + "@gxc-solutions/renderer-base": "^0.0.11" }, "devDependencies": { "@eslint/eslintrc": "^3.3.4", @@ -696,14 +696,14 @@ } }, "node_modules/@gxc-solutions/math": { - "version": "0.0.2", - "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/math/-/math-0.0.2.tgz", - "integrity": "sha512-R6zYvbspis+XoHZ7lwyVLAUGZkJwivbeo94VtN7cSZzOA86AgVev+UQeHt9S1Ua4d1FwgxYVasck1/l5WXR7CQ==" + "version": "0.0.3", + "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/math/-/math-0.0.3.tgz", + "integrity": "sha512-B39/C/3YzfSbLgsf0sBpZILTSO8TIZVbh6tv3pXulG1qDL1tg41mLjp7M263MsC7ARzj7ME8WWsniBj0C4L+XA==" }, "node_modules/@gxc-solutions/renderer-base": { - "version": "0.0.10", - "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/renderer-base/-/renderer-base-0.0.10.tgz", - "integrity": "sha512-DaGo2ii+Vqz5Mk20zXwNXMpxMCoF7fE8EbC+V37qEu+b/YVLtk7/N//1PyMl43hIIMlGNRps81dfJhPkCgSbdQ==", + "version": "0.0.11", + "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/renderer-base/-/renderer-base-0.0.11.tgz", + "integrity": "sha512-JD3ubs5TA7eDV3zqMKx5c3in5/9z9C3YdK0e2cgWya8/LT/HoLl6RdbLqZ0I4xngRksyd/clSoXCWcbtROj8kg==", "peerDependencies": { "@gxc-solutions/math": "^0.0.2" } diff --git a/package.json b/package.json index 924d467..508968b 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "vite": "^7.3.1" }, "dependencies": { - "@gxc-solutions/math": "^0.0.2", - "@gxc-solutions/renderer-base": "^0.0.10" + "@gxc-solutions/math": "^0.0.3", + "@gxc-solutions/renderer-base": "^0.0.11" } }