@flighthq/surface 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/surface.d.ts +16 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +84 -0
- package/dist/surface.js.map +1 -0
- package/dist/surfaceAffine.d.ts +27 -0
- package/dist/surfaceAffine.d.ts.map +1 -0
- package/dist/surfaceAffine.js +159 -0
- package/dist/surfaceAffine.js.map +1 -0
- package/dist/surfaceAlpha.d.ts +27 -0
- package/dist/surfaceAlpha.d.ts.map +1 -0
- package/dist/surfaceAlpha.js +83 -0
- package/dist/surfaceAlpha.js.map +1 -0
- package/dist/surfaceBevel.d.ts +42 -0
- package/dist/surfaceBevel.d.ts.map +1 -0
- package/dist/surfaceBevel.js +102 -0
- package/dist/surfaceBevel.js.map +1 -0
- package/dist/surfaceBlur.d.ts +62 -0
- package/dist/surfaceBlur.d.ts.map +1 -0
- package/dist/surfaceBlur.js +263 -0
- package/dist/surfaceBlur.js.map +1 -0
- package/dist/surfaceChannel.d.ts +24 -0
- package/dist/surfaceChannel.d.ts.map +1 -0
- package/dist/surfaceChannel.js +126 -0
- package/dist/surfaceChannel.js.map +1 -0
- package/dist/surfaceColorMatrix.d.ts +57 -0
- package/dist/surfaceColorMatrix.d.ts.map +1 -0
- package/dist/surfaceColorMatrix.js +127 -0
- package/dist/surfaceColorMatrix.js.map +1 -0
- package/dist/surfaceCompare.d.ts +18 -0
- package/dist/surfaceCompare.d.ts.map +1 -0
- package/dist/surfaceCompare.js +64 -0
- package/dist/surfaceCompare.js.map +1 -0
- package/dist/surfaceComposite.d.ts +53 -0
- package/dist/surfaceComposite.d.ts.map +1 -0
- package/dist/surfaceComposite.js +230 -0
- package/dist/surfaceComposite.js.map +1 -0
- package/dist/surfaceConvolution.d.ts +27 -0
- package/dist/surfaceConvolution.d.ts.map +1 -0
- package/dist/surfaceConvolution.js +103 -0
- package/dist/surfaceConvolution.js.map +1 -0
- package/dist/surfaceCopy.d.ts +23 -0
- package/dist/surfaceCopy.d.ts.map +1 -0
- package/dist/surfaceCopy.js +78 -0
- package/dist/surfaceCopy.js.map +1 -0
- package/dist/surfaceCoverage.d.ts +11 -0
- package/dist/surfaceCoverage.d.ts.map +1 -0
- package/dist/surfaceCoverage.js +29 -0
- package/dist/surfaceCoverage.js.map +1 -0
- package/dist/surfaceCrop.d.ts +33 -0
- package/dist/surfaceCrop.d.ts.map +1 -0
- package/dist/surfaceCrop.js +174 -0
- package/dist/surfaceCrop.js.map +1 -0
- package/dist/surfaceDisplacement.d.ts +48 -0
- package/dist/surfaceDisplacement.d.ts.map +1 -0
- package/dist/surfaceDisplacement.js +131 -0
- package/dist/surfaceDisplacement.js.map +1 -0
- package/dist/surfaceDissolve.d.ts +21 -0
- package/dist/surfaceDissolve.d.ts.map +1 -0
- package/dist/surfaceDissolve.js +97 -0
- package/dist/surfaceDissolve.js.map +1 -0
- package/dist/surfaceDraw.d.ts +8 -0
- package/dist/surfaceDraw.d.ts.map +1 -0
- package/dist/surfaceDraw.js +14 -0
- package/dist/surfaceDraw.js.map +1 -0
- package/dist/surfaceEncode.d.ts +3 -0
- package/dist/surfaceEncode.d.ts.map +1 -0
- package/dist/surfaceEncode.js +18 -0
- package/dist/surfaceEncode.js.map +1 -0
- package/dist/surfaceFill.d.ts +12 -0
- package/dist/surfaceFill.d.ts.map +1 -0
- package/dist/surfaceFill.js +85 -0
- package/dist/surfaceFill.js.map +1 -0
- package/dist/surfaceFingerprint.d.ts +26 -0
- package/dist/surfaceFingerprint.d.ts.map +1 -0
- package/dist/surfaceFingerprint.js +99 -0
- package/dist/surfaceFingerprint.js.map +1 -0
- package/dist/surfaceFlip.d.ts +16 -0
- package/dist/surfaceFlip.d.ts.map +1 -0
- package/dist/surfaceFlip.js +98 -0
- package/dist/surfaceFlip.js.map +1 -0
- package/dist/surfaceFormat.d.ts +26 -0
- package/dist/surfaceFormat.d.ts.map +1 -0
- package/dist/surfaceFormat.js +80 -0
- package/dist/surfaceFormat.js.map +1 -0
- package/dist/surfaceFrom.d.ts +14 -0
- package/dist/surfaceFrom.d.ts.map +1 -0
- package/dist/surfaceFrom.js +87 -0
- package/dist/surfaceFrom.js.map +1 -0
- package/dist/surfaceGradient.d.ts +57 -0
- package/dist/surfaceGradient.d.ts.map +1 -0
- package/dist/surfaceGradient.js +176 -0
- package/dist/surfaceGradient.js.map +1 -0
- package/dist/surfaceGradientFill.d.ts +32 -0
- package/dist/surfaceGradientFill.d.ts.map +1 -0
- package/dist/surfaceGradientFill.js +120 -0
- package/dist/surfaceGradientFill.js.map +1 -0
- package/dist/surfaceHistogram.d.ts +20 -0
- package/dist/surfaceHistogram.d.ts.map +1 -0
- package/dist/surfaceHistogram.js +61 -0
- package/dist/surfaceHistogram.js.map +1 -0
- package/dist/surfaceImageChannel.d.ts +2 -0
- package/dist/surfaceImageChannel.d.ts.map +1 -0
- package/dist/surfaceImageChannel.js +2 -0
- package/dist/surfaceImageChannel.js.map +1 -0
- package/dist/surfaceMedian.d.ts +14 -0
- package/dist/surfaceMedian.d.ts.map +1 -0
- package/dist/surfaceMedian.js +77 -0
- package/dist/surfaceMedian.js.map +1 -0
- package/dist/surfaceMorphological.d.ts +29 -0
- package/dist/surfaceMorphological.d.ts.map +1 -0
- package/dist/surfaceMorphological.js +81 -0
- package/dist/surfaceMorphological.js.map +1 -0
- package/dist/surfaceNoise.d.ts +48 -0
- package/dist/surfaceNoise.d.ts.map +1 -0
- package/dist/surfaceNoise.js +245 -0
- package/dist/surfaceNoise.js.map +1 -0
- package/dist/surfacePaletteMap.d.ts +17 -0
- package/dist/surfacePaletteMap.d.ts.map +1 -0
- package/dist/surfacePaletteMap.js +45 -0
- package/dist/surfacePaletteMap.js.map +1 -0
- package/dist/surfacePixel.d.ts +9 -0
- package/dist/surfacePixel.d.ts.map +1 -0
- package/dist/surfacePixel.js +36 -0
- package/dist/surfacePixel.js.map +1 -0
- package/dist/surfacePixelate.d.ts +13 -0
- package/dist/surfacePixelate.d.ts.map +1 -0
- package/dist/surfacePixelate.js +61 -0
- package/dist/surfacePixelate.js.map +1 -0
- package/dist/surfaceQuery.d.ts +13 -0
- package/dist/surfaceQuery.d.ts.map +1 -0
- package/dist/surfaceQuery.js +46 -0
- package/dist/surfaceQuery.js.map +1 -0
- package/dist/surfaceRegion.d.ts +20 -0
- package/dist/surfaceRegion.d.ts.map +1 -0
- package/dist/surfaceRegion.js +28 -0
- package/dist/surfaceRegion.js.map +1 -0
- package/dist/surfaceResize.d.ts +27 -0
- package/dist/surfaceResize.d.ts.map +1 -0
- package/dist/surfaceResize.js +191 -0
- package/dist/surfaceResize.js.map +1 -0
- package/dist/surfaceRotate.d.ts +32 -0
- package/dist/surfaceRotate.d.ts.map +1 -0
- package/dist/surfaceRotate.js +143 -0
- package/dist/surfaceRotate.js.map +1 -0
- package/dist/surfaceShadow.d.ts +107 -0
- package/dist/surfaceShadow.d.ts.map +1 -0
- package/dist/surfaceShadow.js +173 -0
- package/dist/surfaceShadow.js.map +1 -0
- package/dist/surfaceSharpen.d.ts +25 -0
- package/dist/surfaceSharpen.d.ts.map +1 -0
- package/dist/surfaceSharpen.js +47 -0
- package/dist/surfaceSharpen.js.map +1 -0
- package/dist/surfaceTone.d.ts +28 -0
- package/dist/surfaceTone.d.ts.map +1 -0
- package/dist/surfaceTone.js +69 -0
- package/dist/surfaceTone.js.map +1 -0
- package/dist/surfaceTransform.d.ts +40 -0
- package/dist/surfaceTransform.d.ts.map +1 -0
- package/dist/surfaceTransform.js +163 -0
- package/dist/surfaceTransform.js.map +1 -0
- package/dist/surfaceWarp.d.ts +48 -0
- package/dist/surfaceWarp.d.ts.map +1 -0
- package/dist/surfaceWarp.js +284 -0
- package/dist/surfaceWarp.js.map +1 -0
- package/package.json +39 -0
- package/src/surface.test.ts +78 -0
- package/src/surfaceAffine.test.ts +98 -0
- package/src/surfaceAlpha.test.ts +113 -0
- package/src/surfaceBevel.test.ts +67 -0
- package/src/surfaceBlur.test.ts +240 -0
- package/src/surfaceChannel.test.ts +97 -0
- package/src/surfaceColorMatrix.test.ts +220 -0
- package/src/surfaceCompare.test.ts +92 -0
- package/src/surfaceComposite.test.ts +256 -0
- package/src/surfaceConvolution.test.ts +136 -0
- package/src/surfaceCopy.test.ts +54 -0
- package/src/surfaceCoverage.test.ts +39 -0
- package/src/surfaceCrop.test.ts +116 -0
- package/src/surfaceDisplacement.test.ts +142 -0
- package/src/surfaceDissolve.test.ts +99 -0
- package/src/surfaceDraw.test.ts +38 -0
- package/src/surfaceEncode.test.ts +18 -0
- package/src/surfaceFill.test.ts +89 -0
- package/src/surfaceFingerprint.test.ts +103 -0
- package/src/surfaceFlip.test.ts +59 -0
- package/src/surfaceFormat.test.ts +124 -0
- package/src/surfaceFrom.test.ts +62 -0
- package/src/surfaceGradient.test.ts +91 -0
- package/src/surfaceGradientFill.test.ts +107 -0
- package/src/surfaceHistogram.test.ts +70 -0
- package/src/surfaceImageChannel.test.ts +19 -0
- package/src/surfaceMedian.test.ts +45 -0
- package/src/surfaceMorphological.test.ts +75 -0
- package/src/surfaceNoise.test.ts +169 -0
- package/src/surfacePaletteMap.test.ts +55 -0
- package/src/surfacePixel.test.ts +99 -0
- package/src/surfacePixelate.test.ts +46 -0
- package/src/surfaceQuery.test.ts +48 -0
- package/src/surfaceRegion.test.ts +34 -0
- package/src/surfaceResize.test.ts +112 -0
- package/src/surfaceRotate.test.ts +119 -0
- package/src/surfaceShadow.test.ts +165 -0
- package/src/surfaceSharpen.test.ts +50 -0
- package/src/surfaceTone.test.ts +104 -0
- package/src/surfaceTransform.test.ts +134 -0
- package/src/surfaceWarp.test.ts +124 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export * from './surface';
|
|
2
|
+
export * from './surfaceAffine';
|
|
3
|
+
export * from './surfaceAlpha';
|
|
4
|
+
export * from './surfaceBevel';
|
|
5
|
+
export * from './surfaceBlur';
|
|
6
|
+
export * from './surfaceChannel';
|
|
7
|
+
export * from './surfaceColorMatrix';
|
|
8
|
+
export * from './surfaceCompare';
|
|
9
|
+
export * from './surfaceComposite';
|
|
10
|
+
export * from './surfaceConvolution';
|
|
11
|
+
export * from './surfaceCopy';
|
|
12
|
+
export * from './surfaceCoverage';
|
|
13
|
+
export * from './surfaceCrop';
|
|
14
|
+
export * from './surfaceDisplacement';
|
|
15
|
+
export * from './surfaceDissolve';
|
|
16
|
+
export * from './surfaceDraw';
|
|
17
|
+
export * from './surfaceEncode';
|
|
18
|
+
export * from './surfaceFill';
|
|
19
|
+
export * from './surfaceFingerprint';
|
|
20
|
+
export * from './surfaceFlip';
|
|
21
|
+
export * from './surfaceFormat';
|
|
22
|
+
export * from './surfaceFrom';
|
|
23
|
+
export * from './surfaceGradient';
|
|
24
|
+
export * from './surfaceGradientFill';
|
|
25
|
+
export * from './surfaceHistogram';
|
|
26
|
+
export * from './surfaceImageChannel';
|
|
27
|
+
export * from './surfaceMedian';
|
|
28
|
+
export * from './surfaceMorphological';
|
|
29
|
+
export * from './surfaceNoise';
|
|
30
|
+
export * from './surfacePaletteMap';
|
|
31
|
+
export * from './surfacePixel';
|
|
32
|
+
export * from './surfacePixelate';
|
|
33
|
+
export * from './surfaceQuery';
|
|
34
|
+
export * from './surfaceRegion';
|
|
35
|
+
export * from './surfaceResize';
|
|
36
|
+
export * from './surfaceRotate';
|
|
37
|
+
export * from './surfaceShadow';
|
|
38
|
+
export * from './surfaceSharpen';
|
|
39
|
+
export * from './surfaceTone';
|
|
40
|
+
export * from './surfaceTransform';
|
|
41
|
+
export * from './surfaceWarp';
|
|
42
|
+
export type { AlphaType, ImageFormat, PixelFormat, PixelOrder, RectangleLike, Surface, SurfaceEdgeMode, SurfaceFingerprint, SurfaceHistogram, SurfaceMismatch, SurfaceRegion, SurfaceResizeMode, ThresholdOperation, } from '@flighthq/types';
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,YAAY,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export * from './surface';
|
|
2
|
+
export * from './surfaceAffine';
|
|
3
|
+
export * from './surfaceAlpha';
|
|
4
|
+
export * from './surfaceBevel';
|
|
5
|
+
export * from './surfaceBlur';
|
|
6
|
+
export * from './surfaceChannel';
|
|
7
|
+
export * from './surfaceColorMatrix';
|
|
8
|
+
export * from './surfaceCompare';
|
|
9
|
+
export * from './surfaceComposite';
|
|
10
|
+
export * from './surfaceConvolution';
|
|
11
|
+
export * from './surfaceCopy';
|
|
12
|
+
export * from './surfaceCoverage';
|
|
13
|
+
export * from './surfaceCrop';
|
|
14
|
+
export * from './surfaceDisplacement';
|
|
15
|
+
export * from './surfaceDissolve';
|
|
16
|
+
export * from './surfaceDraw';
|
|
17
|
+
export * from './surfaceEncode';
|
|
18
|
+
export * from './surfaceFill';
|
|
19
|
+
export * from './surfaceFingerprint';
|
|
20
|
+
export * from './surfaceFlip';
|
|
21
|
+
export * from './surfaceFormat';
|
|
22
|
+
export * from './surfaceFrom';
|
|
23
|
+
export * from './surfaceGradient';
|
|
24
|
+
export * from './surfaceGradientFill';
|
|
25
|
+
export * from './surfaceHistogram';
|
|
26
|
+
export * from './surfaceImageChannel';
|
|
27
|
+
export * from './surfaceMedian';
|
|
28
|
+
export * from './surfaceMorphological';
|
|
29
|
+
export * from './surfaceNoise';
|
|
30
|
+
export * from './surfacePaletteMap';
|
|
31
|
+
export * from './surfacePixel';
|
|
32
|
+
export * from './surfacePixelate';
|
|
33
|
+
export * from './surfaceQuery';
|
|
34
|
+
export * from './surfaceRegion';
|
|
35
|
+
export * from './surfaceResize';
|
|
36
|
+
export * from './surfaceRotate';
|
|
37
|
+
export * from './surfaceShadow';
|
|
38
|
+
export * from './surfaceSharpen';
|
|
39
|
+
export * from './surfaceTone';
|
|
40
|
+
export * from './surfaceTransform';
|
|
41
|
+
export * from './surfaceWarp';
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AlphaType, Surface } from '@flighthq/types';
|
|
2
|
+
export declare function cloneSurface(source: Readonly<Surface>): Surface;
|
|
3
|
+
/**
|
|
4
|
+
* Converts the alpha representation of `out` in place between `'straight'` and
|
|
5
|
+
* `'premultiplied'`. If `out.alphaType` already matches `target`, this is a
|
|
6
|
+
* no-op (neither pixel data nor the metadata field changes).
|
|
7
|
+
*
|
|
8
|
+
* - `'straight' → 'premultiplied'`: RGB channels are multiplied by alpha/255.
|
|
9
|
+
* - `'premultiplied' → 'straight'`: RGB channels are divided by alpha/255.
|
|
10
|
+
* Pixels with alpha=0 are left as `(0,0,0,0)`.
|
|
11
|
+
*
|
|
12
|
+
* Updates `out.alphaType` to `target` after conversion.
|
|
13
|
+
*/
|
|
14
|
+
export declare function convertSurfaceAlphaType(out: Surface, target: AlphaType): void;
|
|
15
|
+
export declare function createSurface(width: number, height: number, color?: number): Surface;
|
|
16
|
+
//# sourceMappingURL=surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAW/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA6B7E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAwBvF"}
|
package/dist/surface.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createEntity } from '@flighthq/entity';
|
|
2
|
+
import { invalidateImageResource } from '@flighthq/image';
|
|
3
|
+
export function cloneSurface(source) {
|
|
4
|
+
return createEntity({
|
|
5
|
+
alphaType: source.alphaType,
|
|
6
|
+
colorSpace: source.colorSpace,
|
|
7
|
+
data: new Uint8ClampedArray(source.data),
|
|
8
|
+
format: source.format,
|
|
9
|
+
height: source.height,
|
|
10
|
+
source: null,
|
|
11
|
+
version: 0,
|
|
12
|
+
width: source.width,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Converts the alpha representation of `out` in place between `'straight'` and
|
|
17
|
+
* `'premultiplied'`. If `out.alphaType` already matches `target`, this is a
|
|
18
|
+
* no-op (neither pixel data nor the metadata field changes).
|
|
19
|
+
*
|
|
20
|
+
* - `'straight' → 'premultiplied'`: RGB channels are multiplied by alpha/255.
|
|
21
|
+
* - `'premultiplied' → 'straight'`: RGB channels are divided by alpha/255.
|
|
22
|
+
* Pixels with alpha=0 are left as `(0,0,0,0)`.
|
|
23
|
+
*
|
|
24
|
+
* Updates `out.alphaType` to `target` after conversion.
|
|
25
|
+
*/
|
|
26
|
+
export function convertSurfaceAlphaType(out, target) {
|
|
27
|
+
if (out.alphaType === target)
|
|
28
|
+
return;
|
|
29
|
+
const data = out.data;
|
|
30
|
+
const len = out.width * out.height * 4;
|
|
31
|
+
if (target === 'premultiplied') {
|
|
32
|
+
for (let i = 0; i < len; i += 4) {
|
|
33
|
+
const a = data[i + 3] / 255;
|
|
34
|
+
data[i] = Math.round(data[i] * a);
|
|
35
|
+
data[i + 1] = Math.round(data[i + 1] * a);
|
|
36
|
+
data[i + 2] = Math.round(data[i + 2] * a);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
for (let i = 0; i < len; i += 4) {
|
|
41
|
+
const a = data[i + 3];
|
|
42
|
+
if (a === 0) {
|
|
43
|
+
data[i] = 0;
|
|
44
|
+
data[i + 1] = 0;
|
|
45
|
+
data[i + 2] = 0;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const inv = 255 / a;
|
|
49
|
+
data[i] = Math.min(255, Math.round(data[i] * inv));
|
|
50
|
+
data[i + 1] = Math.min(255, Math.round(data[i + 1] * inv));
|
|
51
|
+
data[i + 2] = Math.min(255, Math.round(data[i + 2] * inv));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Mutate the alphaType metadata field.
|
|
56
|
+
out.alphaType = target;
|
|
57
|
+
invalidateImageResource(out);
|
|
58
|
+
}
|
|
59
|
+
export function createSurface(width, height, color = 0) {
|
|
60
|
+
const data = new Uint8ClampedArray(width * height * 4);
|
|
61
|
+
if (color !== 0) {
|
|
62
|
+
const r = (color >>> 24) & 0xff;
|
|
63
|
+
const g = (color >> 16) & 0xff;
|
|
64
|
+
const b = (color >> 8) & 0xff;
|
|
65
|
+
const a = color & 0xff;
|
|
66
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
67
|
+
data[i] = r;
|
|
68
|
+
data[i + 1] = g;
|
|
69
|
+
data[i + 2] = b;
|
|
70
|
+
data[i + 3] = a;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return createEntity({
|
|
74
|
+
alphaType: 'straight',
|
|
75
|
+
colorSpace: 'srgb',
|
|
76
|
+
data,
|
|
77
|
+
format: 'rgba8unorm',
|
|
78
|
+
height,
|
|
79
|
+
source: null,
|
|
80
|
+
version: 0,
|
|
81
|
+
width,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { SurfaceEdgeMode, SurfaceRegion, SurfaceResizeMode } from '@flighthq/types';
|
|
2
|
+
/**
|
|
3
|
+
* Applies a full 2×3 affine transform to the `source` region, writing into
|
|
4
|
+
* `dest`. The `matrix` is a 6-element array `[a, b, c, d, e, f]` representing:
|
|
5
|
+
*
|
|
6
|
+
* ```
|
|
7
|
+
* [ a c e ]
|
|
8
|
+
* [ b d f ]
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Maps each `dest` pixel `(x, y)` back to source coordinates by the inverse
|
|
12
|
+
* transform:
|
|
13
|
+
*
|
|
14
|
+
* ```
|
|
15
|
+
* srcX = a * x + c * y + e
|
|
16
|
+
* srcY = b * x + d * y + f
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* This is a forward-mapping: for each output pixel the source position is
|
|
20
|
+
* computed, then sampled according to `sampleMode` (default `'bilinear'`).
|
|
21
|
+
* Out-of-bounds source positions are resolved with `edgeMode` (default
|
|
22
|
+
* `'transparent'`).
|
|
23
|
+
*
|
|
24
|
+
* `dest` must not alias `source` when their regions overlap.
|
|
25
|
+
*/
|
|
26
|
+
export declare function transformSurface(dest: Readonly<SurfaceRegion>, source: Readonly<SurfaceRegion>, matrix: Readonly<[number, number, number, number, number, number]>, edgeMode?: SurfaceEdgeMode, sampleMode?: SurfaceResizeMode): void;
|
|
27
|
+
//# sourceMappingURL=surfaceAffine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surfaceAffine.d.ts","sourceRoot":"","sources":["../src/surfaceAffine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAClE,QAAQ,GAAE,eAA+B,EACzC,UAAU,GAAE,iBAA8B,GACzC,IAAI,CAuCN"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { invalidateImageResource } from '@flighthq/image';
|
|
2
|
+
/**
|
|
3
|
+
* Applies a full 2×3 affine transform to the `source` region, writing into
|
|
4
|
+
* `dest`. The `matrix` is a 6-element array `[a, b, c, d, e, f]` representing:
|
|
5
|
+
*
|
|
6
|
+
* ```
|
|
7
|
+
* [ a c e ]
|
|
8
|
+
* [ b d f ]
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Maps each `dest` pixel `(x, y)` back to source coordinates by the inverse
|
|
12
|
+
* transform:
|
|
13
|
+
*
|
|
14
|
+
* ```
|
|
15
|
+
* srcX = a * x + c * y + e
|
|
16
|
+
* srcY = b * x + d * y + f
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* This is a forward-mapping: for each output pixel the source position is
|
|
20
|
+
* computed, then sampled according to `sampleMode` (default `'bilinear'`).
|
|
21
|
+
* Out-of-bounds source positions are resolved with `edgeMode` (default
|
|
22
|
+
* `'transparent'`).
|
|
23
|
+
*
|
|
24
|
+
* `dest` must not alias `source` when their regions overlap.
|
|
25
|
+
*/
|
|
26
|
+
export function transformSurface(dest, source, matrix, edgeMode = 'transparent', sampleMode = 'bilinear') {
|
|
27
|
+
const dw = dest.width;
|
|
28
|
+
const dh = dest.height;
|
|
29
|
+
const sw = source.width;
|
|
30
|
+
const sh = source.height;
|
|
31
|
+
if (dw === 0 || dh === 0 || sw === 0 || sh === 0)
|
|
32
|
+
return;
|
|
33
|
+
const [a, b, c, d, e, f] = matrix;
|
|
34
|
+
const sd = source.surface.data;
|
|
35
|
+
const dd = dest.surface.data;
|
|
36
|
+
const sStride = source.surface.width;
|
|
37
|
+
const dStride = dest.surface.width;
|
|
38
|
+
for (let dy = 0; dy < dh; dy++) {
|
|
39
|
+
const oy = dest.y + dy;
|
|
40
|
+
if (oy < 0 || oy >= dest.surface.height)
|
|
41
|
+
continue;
|
|
42
|
+
for (let dx = 0; dx < dw; dx++) {
|
|
43
|
+
const ox = dest.x + dx;
|
|
44
|
+
if (ox < 0 || ox >= dStride)
|
|
45
|
+
continue;
|
|
46
|
+
// Map dest pixel to source coordinates.
|
|
47
|
+
const sx = a * dx + c * dy + e;
|
|
48
|
+
const sy = b * dx + d * dy + f;
|
|
49
|
+
const di = (oy * dStride + ox) * 4;
|
|
50
|
+
sampleSurface(dd, di, sd, sw, sh, source.x, source.y, sStride, source.surface.height, sx, sy, sampleMode, edgeMode);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
invalidateImageResource(dest.surface);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Samples the source surface at fractional coordinates `(sx, sy)` in
|
|
57
|
+
* source-region-local space, writing the result into `dd[di..di+3]`. Edge
|
|
58
|
+
* behaviour is controlled by `edgeMode`; sampling quality by `sampleMode`.
|
|
59
|
+
*/
|
|
60
|
+
function sampleSurface(dd, di, sd, sw, sh, originX, originY, sStride, sHeight, sx, sy, sampleMode, edgeMode) {
|
|
61
|
+
if (sampleMode === 'nearest') {
|
|
62
|
+
const ix = Math.round(sx);
|
|
63
|
+
const iy = Math.round(sy);
|
|
64
|
+
const cx = resolveEdge(ix, sw, edgeMode);
|
|
65
|
+
const cy = resolveEdge(iy, sh, edgeMode);
|
|
66
|
+
if (cx === null || cy === null) {
|
|
67
|
+
writeTransparent(dd, di);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const si = ((originY + cy) * sStride + (originX + cx)) * 4;
|
|
71
|
+
dd[di] = sd[si];
|
|
72
|
+
dd[di + 1] = sd[si + 1];
|
|
73
|
+
dd[di + 2] = sd[si + 2];
|
|
74
|
+
dd[di + 3] = sd[si + 3];
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (sampleMode === 'bicubic') {
|
|
78
|
+
sampleBicubic(dd, di, sd, sw, sh, originX, originY, sStride, sHeight, sx, sy, edgeMode);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// bilinear (default)
|
|
82
|
+
sampleBilinear(dd, di, sd, sw, sh, originX, originY, sStride, sHeight, sx, sy, edgeMode);
|
|
83
|
+
}
|
|
84
|
+
function sampleBilinear(dd, di, sd, sw, sh, originX, originY, sStride, _sHeight, sx, sy, edgeMode) {
|
|
85
|
+
const x0 = Math.floor(sx);
|
|
86
|
+
const y0 = Math.floor(sy);
|
|
87
|
+
const tx = sx - x0;
|
|
88
|
+
const ty = sy - y0;
|
|
89
|
+
const cx00 = resolveEdge(x0, sw, edgeMode);
|
|
90
|
+
const cx10 = resolveEdge(x0 + 1, sw, edgeMode);
|
|
91
|
+
const cy00 = resolveEdge(y0, sh, edgeMode);
|
|
92
|
+
const cy10 = resolveEdge(y0 + 1, sh, edgeMode);
|
|
93
|
+
for (let c = 0; c < 4; c++) {
|
|
94
|
+
const v00 = cx00 !== null && cy00 !== null ? sd[((originY + cy00) * sStride + originX + cx00) * 4 + c] : 0;
|
|
95
|
+
const v10 = cx10 !== null && cy00 !== null ? sd[((originY + cy00) * sStride + originX + cx10) * 4 + c] : 0;
|
|
96
|
+
const v01 = cx00 !== null && cy10 !== null ? sd[((originY + cy10) * sStride + originX + cx00) * 4 + c] : 0;
|
|
97
|
+
const v11 = cx10 !== null && cy10 !== null ? sd[((originY + cy10) * sStride + originX + cx10) * 4 + c] : 0;
|
|
98
|
+
const top = v00 * (1 - tx) + v10 * tx;
|
|
99
|
+
const bottom = v01 * (1 - tx) + v11 * tx;
|
|
100
|
+
dd[di + c] = Math.round(top * (1 - ty) + bottom * ty);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function sampleBicubic(dd, di, sd, sw, sh, originX, originY, sStride, _sHeight, sx, sy, edgeMode) {
|
|
104
|
+
const x1 = Math.floor(sx);
|
|
105
|
+
const y1 = Math.floor(sy);
|
|
106
|
+
const tx = sx - x1;
|
|
107
|
+
const ty = sy - y1;
|
|
108
|
+
for (let c = 0; c < 4; c++) {
|
|
109
|
+
let sum = 0;
|
|
110
|
+
for (let m = -1; m <= 2; m++) {
|
|
111
|
+
const wy = catmullRomWeight(ty - m);
|
|
112
|
+
const ry = resolveEdge(y1 + m, sh, edgeMode);
|
|
113
|
+
for (let n = -1; n <= 2; n++) {
|
|
114
|
+
const wx = catmullRomWeight(tx - n);
|
|
115
|
+
const rx = resolveEdge(x1 + n, sw, edgeMode);
|
|
116
|
+
const v = rx !== null && ry !== null ? sd[((originY + ry) * sStride + originX + rx) * 4 + c] : 0;
|
|
117
|
+
sum += v * wy * wx;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
dd[di + c] = Math.max(0, Math.min(255, Math.round(sum)));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Maps a local coordinate `v` in `[0, size)` using the edge mode.
|
|
125
|
+
* Returns `null` for `'transparent'` when out of bounds.
|
|
126
|
+
*/
|
|
127
|
+
function resolveEdge(v, size, mode) {
|
|
128
|
+
if (v >= 0 && v < size)
|
|
129
|
+
return v;
|
|
130
|
+
switch (mode) {
|
|
131
|
+
case 'clamp':
|
|
132
|
+
return Math.max(0, Math.min(size - 1, v));
|
|
133
|
+
case 'wrap':
|
|
134
|
+
return ((v % size) + size) % size;
|
|
135
|
+
case 'mirror': {
|
|
136
|
+
const period = 2 * size;
|
|
137
|
+
const wrapped = ((v % period) + period) % period;
|
|
138
|
+
return wrapped < size ? wrapped : period - 1 - wrapped;
|
|
139
|
+
}
|
|
140
|
+
default:
|
|
141
|
+
// 'transparent'
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function catmullRomWeight(t) {
|
|
146
|
+
const a = Math.abs(t);
|
|
147
|
+
if (a >= 2)
|
|
148
|
+
return 0;
|
|
149
|
+
if (a >= 1)
|
|
150
|
+
return -0.5 * a * a * a + 2.5 * a * a - 4 * a + 2;
|
|
151
|
+
return 1.5 * a * a * a - 2.5 * a * a + 1;
|
|
152
|
+
}
|
|
153
|
+
function writeTransparent(dd, di) {
|
|
154
|
+
dd[di] = 0;
|
|
155
|
+
dd[di + 1] = 0;
|
|
156
|
+
dd[di + 2] = 0;
|
|
157
|
+
dd[di + 3] = 0;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=surfaceAffine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surfaceAffine.js","sourceRoot":"","sources":["../src/surfaceAffine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { SurfaceRegion } from '@flighthq/types';
|
|
2
|
+
/**
|
|
3
|
+
* Copies only the alpha channel from the `source` region into the `dest`
|
|
4
|
+
* region. RGB channels of `dest` are left unchanged. The copied size is the
|
|
5
|
+
* overlap of the two regions.
|
|
6
|
+
*
|
|
7
|
+
* Safe to pass the same surface and region in `dest` and `source` (no-op on
|
|
8
|
+
* alpha since each value is read and immediately written to the same location).
|
|
9
|
+
*/
|
|
10
|
+
export declare function copySurfaceAlpha(dest: Readonly<SurfaceRegion>, source: Readonly<SurfaceRegion>): void;
|
|
11
|
+
/**
|
|
12
|
+
* Scales every alpha value in the `out` region by `factor` (0–1). RGB channels
|
|
13
|
+
* are unchanged. A `factor` of 0 makes the region fully transparent; a `factor`
|
|
14
|
+
* of 1 leaves it unchanged; values in between fade it proportionally.
|
|
15
|
+
*
|
|
16
|
+
* `factor` is clamped to [0, 1].
|
|
17
|
+
*/
|
|
18
|
+
export declare function multiplySurfaceAlpha(out: Readonly<SurfaceRegion>, factor: number): void;
|
|
19
|
+
/**
|
|
20
|
+
* Writes a constant `alpha` value (0–255) to every pixel in the `out` region.
|
|
21
|
+
* RGB channels are unchanged. Useful for making a region fully opaque or
|
|
22
|
+
* transparent in a single call.
|
|
23
|
+
*
|
|
24
|
+
* `alpha` is clamped to [0, 255].
|
|
25
|
+
*/
|
|
26
|
+
export declare function setSurfaceAlpha(out: Readonly<SurfaceRegion>, alpha: number): void;
|
|
27
|
+
//# sourceMappingURL=surfaceAlpha.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surfaceAlpha.d.ts","sourceRoot":"","sources":["../src/surfaceAlpha.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAqBrG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAevF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAcjF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { invalidateImageResource } from '@flighthq/image';
|
|
2
|
+
/**
|
|
3
|
+
* Copies only the alpha channel from the `source` region into the `dest`
|
|
4
|
+
* region. RGB channels of `dest` are left unchanged. The copied size is the
|
|
5
|
+
* overlap of the two regions.
|
|
6
|
+
*
|
|
7
|
+
* Safe to pass the same surface and region in `dest` and `source` (no-op on
|
|
8
|
+
* alpha since each value is read and immediately written to the same location).
|
|
9
|
+
*/
|
|
10
|
+
export function copySurfaceAlpha(dest, source) {
|
|
11
|
+
const w = Math.min(dest.width, source.width);
|
|
12
|
+
const h = Math.min(dest.height, source.height);
|
|
13
|
+
const sd = source.surface.data;
|
|
14
|
+
const dd = dest.surface.data;
|
|
15
|
+
for (let py = 0; py < h; py++) {
|
|
16
|
+
const sy = source.y + py;
|
|
17
|
+
const dy = dest.y + py;
|
|
18
|
+
if (sy < 0 || sy >= source.surface.height || dy < 0 || dy >= dest.surface.height)
|
|
19
|
+
continue;
|
|
20
|
+
for (let px = 0; px < w; px++) {
|
|
21
|
+
const sx = source.x + px;
|
|
22
|
+
const dx = dest.x + px;
|
|
23
|
+
if (sx < 0 || sx >= source.surface.width || dx < 0 || dx >= dest.surface.width)
|
|
24
|
+
continue;
|
|
25
|
+
const si = (sy * source.surface.width + sx) * 4;
|
|
26
|
+
const di = (dy * dest.surface.width + dx) * 4;
|
|
27
|
+
// Read alpha before writing — safe for the aliased case.
|
|
28
|
+
const alpha = sd[si + 3];
|
|
29
|
+
dd[di + 3] = alpha;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
invalidateImageResource(dest.surface);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Scales every alpha value in the `out` region by `factor` (0–1). RGB channels
|
|
36
|
+
* are unchanged. A `factor` of 0 makes the region fully transparent; a `factor`
|
|
37
|
+
* of 1 leaves it unchanged; values in between fade it proportionally.
|
|
38
|
+
*
|
|
39
|
+
* `factor` is clamped to [0, 1].
|
|
40
|
+
*/
|
|
41
|
+
export function multiplySurfaceAlpha(out, factor) {
|
|
42
|
+
const f = Math.max(0, Math.min(1, factor));
|
|
43
|
+
const data = out.surface.data;
|
|
44
|
+
const surfaceWidth = out.surface.width;
|
|
45
|
+
for (let py = 0; py < out.height; py++) {
|
|
46
|
+
const y = out.y + py;
|
|
47
|
+
if (y < 0 || y >= out.surface.height)
|
|
48
|
+
continue;
|
|
49
|
+
for (let px = 0; px < out.width; px++) {
|
|
50
|
+
const x = out.x + px;
|
|
51
|
+
if (x < 0 || x >= surfaceWidth)
|
|
52
|
+
continue;
|
|
53
|
+
const i = (y * surfaceWidth + x) * 4 + 3;
|
|
54
|
+
data[i] = Math.round(data[i] * f);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
invalidateImageResource(out.surface);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Writes a constant `alpha` value (0–255) to every pixel in the `out` region.
|
|
61
|
+
* RGB channels are unchanged. Useful for making a region fully opaque or
|
|
62
|
+
* transparent in a single call.
|
|
63
|
+
*
|
|
64
|
+
* `alpha` is clamped to [0, 255].
|
|
65
|
+
*/
|
|
66
|
+
export function setSurfaceAlpha(out, alpha) {
|
|
67
|
+
const a = Math.max(0, Math.min(255, Math.round(alpha)));
|
|
68
|
+
const data = out.surface.data;
|
|
69
|
+
const surfaceWidth = out.surface.width;
|
|
70
|
+
for (let py = 0; py < out.height; py++) {
|
|
71
|
+
const y = out.y + py;
|
|
72
|
+
if (y < 0 || y >= out.surface.height)
|
|
73
|
+
continue;
|
|
74
|
+
for (let px = 0; px < out.width; px++) {
|
|
75
|
+
const x = out.x + px;
|
|
76
|
+
if (x < 0 || x >= surfaceWidth)
|
|
77
|
+
continue;
|
|
78
|
+
data[(y * surfaceWidth + x) * 4 + 3] = a;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
invalidateImageResource(out.surface);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=surfaceAlpha.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surfaceAlpha.js","sourceRoot":"","sources":["../src/surfaceAlpha.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SurfaceRegion } from '@flighthq/types';
|
|
2
|
+
export type SurfaceBevelType = 'both' | 'inner' | 'outer';
|
|
3
|
+
export interface SurfaceBevelOptions {
|
|
4
|
+
/** Light direction in radians, pointing toward the light source. Default π/4. */
|
|
5
|
+
angle?: number;
|
|
6
|
+
/** Sampling offset along the light axis, in pixels. Default 4. */
|
|
7
|
+
distance?: number;
|
|
8
|
+
radiusX?: number;
|
|
9
|
+
radiusY?: number;
|
|
10
|
+
passes?: number;
|
|
11
|
+
/** Packed 0xRRGGBBAA color of the lit edge. Default 0xffffffff. */
|
|
12
|
+
highlightColor?: number;
|
|
13
|
+
/** Packed 0xRRGGBBAA color of the shaded edge. Default 0x000000ff. */
|
|
14
|
+
shadowColor?: number;
|
|
15
|
+
/** Overall intensity multiplier. Default 1. */
|
|
16
|
+
intensity?: number;
|
|
17
|
+
/** Where the bevel is drawn relative to the shape. Default 'inner'. */
|
|
18
|
+
type?: SurfaceBevelType;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Produces a bevel mask in `out`: a tinted highlight on the edge facing the
|
|
22
|
+
* light and a shadow on the opposite edge, derived from the directional
|
|
23
|
+
* gradient of the source's blurred alpha.
|
|
24
|
+
*
|
|
25
|
+
* The edge gradient is `m(p - L) - m(p + L)` where `m` is the blurred alpha and
|
|
26
|
+
* `L = (cos(angle), sin(angle)) * distance`. A positive gradient (edge facing the
|
|
27
|
+
* light) draws the highlight color; a negative gradient draws the shadow color.
|
|
28
|
+
*
|
|
29
|
+
* `type` clips the result: 'inner' keeps it inside the shape, 'outer' outside,
|
|
30
|
+
* 'both' applies no clipping.
|
|
31
|
+
*
|
|
32
|
+
* To complete the effect, composite `out` over the original source.
|
|
33
|
+
*
|
|
34
|
+
* `scratch` must be at least `source.width * source.height * 4` bytes; it must
|
|
35
|
+
* be a distinct buffer from `out` (the blurred alpha is sampled while `out` is
|
|
36
|
+
* written). Its contents are undefined after the call.
|
|
37
|
+
*
|
|
38
|
+
* `out` must NOT alias `source.surface.data`: `out` is used as the blur scratch,
|
|
39
|
+
* and the source alpha is read again afterward for `inner`/`outer` clipping.
|
|
40
|
+
*/
|
|
41
|
+
export declare function bevelSurface(out: Uint8ClampedArray, scratch: Uint8ClampedArray, source: Readonly<SurfaceRegion>, options?: Readonly<SurfaceBevelOptions>): void;
|
|
42
|
+
//# sourceMappingURL=surfaceBevel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surfaceBevel.d.ts","sourceRoot":"","sources":["../src/surfaceBevel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,OAAO,GAAE,QAAQ,CAAC,mBAAmB,CAAM,GAC1C,IAAI,CA+CN"}
|