@flighthq/bitmap 0.3.0-edge.1458.0c01b63

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.
Files changed (219) hide show
  1. package/dist/bitmap.d.ts +17 -0
  2. package/dist/bitmap.d.ts.map +1 -0
  3. package/dist/bitmap.js +87 -0
  4. package/dist/bitmap.js.map +1 -0
  5. package/dist/bitmapAffine.d.ts +27 -0
  6. package/dist/bitmapAffine.d.ts.map +1 -0
  7. package/dist/bitmapAffine.js +159 -0
  8. package/dist/bitmapAffine.js.map +1 -0
  9. package/dist/bitmapAlpha.d.ts +27 -0
  10. package/dist/bitmapAlpha.d.ts.map +1 -0
  11. package/dist/bitmapAlpha.js +83 -0
  12. package/dist/bitmapAlpha.js.map +1 -0
  13. package/dist/bitmapBevel.d.ts +24 -0
  14. package/dist/bitmapBevel.d.ts.map +1 -0
  15. package/dist/bitmapBevel.js +102 -0
  16. package/dist/bitmapBevel.js.map +1 -0
  17. package/dist/bitmapBlur.d.ts +57 -0
  18. package/dist/bitmapBlur.d.ts.map +1 -0
  19. package/dist/bitmapBlur.js +263 -0
  20. package/dist/bitmapBlur.js.map +1 -0
  21. package/dist/bitmapChannel.d.ts +24 -0
  22. package/dist/bitmapChannel.d.ts.map +1 -0
  23. package/dist/bitmapChannel.js +127 -0
  24. package/dist/bitmapChannel.js.map +1 -0
  25. package/dist/bitmapColorMatrix.d.ts +57 -0
  26. package/dist/bitmapColorMatrix.d.ts.map +1 -0
  27. package/dist/bitmapColorMatrix.js +127 -0
  28. package/dist/bitmapColorMatrix.js.map +1 -0
  29. package/dist/bitmapCompare.d.ts +18 -0
  30. package/dist/bitmapCompare.d.ts.map +1 -0
  31. package/dist/bitmapCompare.js +64 -0
  32. package/dist/bitmapCompare.js.map +1 -0
  33. package/dist/bitmapComposite.d.ts +54 -0
  34. package/dist/bitmapComposite.d.ts.map +1 -0
  35. package/dist/bitmapComposite.js +262 -0
  36. package/dist/bitmapComposite.js.map +1 -0
  37. package/dist/bitmapConvolution.d.ts +17 -0
  38. package/dist/bitmapConvolution.d.ts.map +1 -0
  39. package/dist/bitmapConvolution.js +103 -0
  40. package/dist/bitmapConvolution.js.map +1 -0
  41. package/dist/bitmapCopy.d.ts +23 -0
  42. package/dist/bitmapCopy.d.ts.map +1 -0
  43. package/dist/bitmapCopy.js +78 -0
  44. package/dist/bitmapCopy.js.map +1 -0
  45. package/dist/bitmapCoverage.d.ts +11 -0
  46. package/dist/bitmapCoverage.d.ts.map +1 -0
  47. package/dist/bitmapCoverage.js +29 -0
  48. package/dist/bitmapCoverage.js.map +1 -0
  49. package/dist/bitmapCrop.d.ts +33 -0
  50. package/dist/bitmapCrop.d.ts.map +1 -0
  51. package/dist/bitmapCrop.js +175 -0
  52. package/dist/bitmapCrop.js.map +1 -0
  53. package/dist/bitmapDisplacement.d.ts +22 -0
  54. package/dist/bitmapDisplacement.d.ts.map +1 -0
  55. package/dist/bitmapDisplacement.js +111 -0
  56. package/dist/bitmapDisplacement.js.map +1 -0
  57. package/dist/bitmapDissolve.d.ts +21 -0
  58. package/dist/bitmapDissolve.d.ts.map +1 -0
  59. package/dist/bitmapDissolve.js +97 -0
  60. package/dist/bitmapDissolve.js.map +1 -0
  61. package/dist/bitmapDraw.d.ts +8 -0
  62. package/dist/bitmapDraw.d.ts.map +1 -0
  63. package/dist/bitmapDraw.js +14 -0
  64. package/dist/bitmapDraw.js.map +1 -0
  65. package/dist/bitmapEncode.d.ts +3 -0
  66. package/dist/bitmapEncode.d.ts.map +1 -0
  67. package/dist/bitmapEncode.js +18 -0
  68. package/dist/bitmapEncode.js.map +1 -0
  69. package/dist/bitmapFill.d.ts +12 -0
  70. package/dist/bitmapFill.d.ts.map +1 -0
  71. package/dist/bitmapFill.js +85 -0
  72. package/dist/bitmapFill.js.map +1 -0
  73. package/dist/bitmapFingerprint.d.ts +26 -0
  74. package/dist/bitmapFingerprint.d.ts.map +1 -0
  75. package/dist/bitmapFingerprint.js +99 -0
  76. package/dist/bitmapFingerprint.js.map +1 -0
  77. package/dist/bitmapFlip.d.ts +16 -0
  78. package/dist/bitmapFlip.d.ts.map +1 -0
  79. package/dist/bitmapFlip.js +98 -0
  80. package/dist/bitmapFlip.js.map +1 -0
  81. package/dist/bitmapFormat.d.ts +26 -0
  82. package/dist/bitmapFormat.d.ts.map +1 -0
  83. package/dist/bitmapFormat.js +80 -0
  84. package/dist/bitmapFormat.js.map +1 -0
  85. package/dist/bitmapFrom.d.ts +23 -0
  86. package/dist/bitmapFrom.d.ts.map +1 -0
  87. package/dist/bitmapFrom.js +90 -0
  88. package/dist/bitmapFrom.js.map +1 -0
  89. package/dist/bitmapGradient.d.ts +36 -0
  90. package/dist/bitmapGradient.d.ts.map +1 -0
  91. package/dist/bitmapGradient.js +176 -0
  92. package/dist/bitmapGradient.js.map +1 -0
  93. package/dist/bitmapGradientFill.d.ts +32 -0
  94. package/dist/bitmapGradientFill.d.ts.map +1 -0
  95. package/dist/bitmapGradientFill.js +120 -0
  96. package/dist/bitmapGradientFill.js.map +1 -0
  97. package/dist/bitmapHistogram.d.ts +20 -0
  98. package/dist/bitmapHistogram.d.ts.map +1 -0
  99. package/dist/bitmapHistogram.js +61 -0
  100. package/dist/bitmapHistogram.js.map +1 -0
  101. package/dist/bitmapImageChannel.d.ts +2 -0
  102. package/dist/bitmapImageChannel.d.ts.map +1 -0
  103. package/dist/bitmapImageChannel.js +2 -0
  104. package/dist/bitmapImageChannel.js.map +1 -0
  105. package/dist/bitmapMedian.d.ts +14 -0
  106. package/dist/bitmapMedian.d.ts.map +1 -0
  107. package/dist/bitmapMedian.js +77 -0
  108. package/dist/bitmapMedian.js.map +1 -0
  109. package/dist/bitmapMorphological.d.ts +29 -0
  110. package/dist/bitmapMorphological.d.ts.map +1 -0
  111. package/dist/bitmapMorphological.js +81 -0
  112. package/dist/bitmapMorphological.js.map +1 -0
  113. package/dist/bitmapNoise.d.ts +48 -0
  114. package/dist/bitmapNoise.d.ts.map +1 -0
  115. package/dist/bitmapNoise.js +245 -0
  116. package/dist/bitmapNoise.js.map +1 -0
  117. package/dist/bitmapPaletteMap.d.ts +17 -0
  118. package/dist/bitmapPaletteMap.d.ts.map +1 -0
  119. package/dist/bitmapPaletteMap.js +45 -0
  120. package/dist/bitmapPaletteMap.js.map +1 -0
  121. package/dist/bitmapPixel.d.ts +9 -0
  122. package/dist/bitmapPixel.d.ts.map +1 -0
  123. package/dist/bitmapPixel.js +36 -0
  124. package/dist/bitmapPixel.js.map +1 -0
  125. package/dist/bitmapPixelate.d.ts +13 -0
  126. package/dist/bitmapPixelate.d.ts.map +1 -0
  127. package/dist/bitmapPixelate.js +61 -0
  128. package/dist/bitmapPixelate.js.map +1 -0
  129. package/dist/bitmapQuery.d.ts +13 -0
  130. package/dist/bitmapQuery.d.ts.map +1 -0
  131. package/dist/bitmapQuery.js +46 -0
  132. package/dist/bitmapQuery.js.map +1 -0
  133. package/dist/bitmapRegion.d.ts +20 -0
  134. package/dist/bitmapRegion.d.ts.map +1 -0
  135. package/dist/bitmapRegion.js +28 -0
  136. package/dist/bitmapRegion.js.map +1 -0
  137. package/dist/bitmapResize.d.ts +17 -0
  138. package/dist/bitmapResize.d.ts.map +1 -0
  139. package/dist/bitmapResize.js +191 -0
  140. package/dist/bitmapResize.js.map +1 -0
  141. package/dist/bitmapRotate.d.ts +32 -0
  142. package/dist/bitmapRotate.d.ts.map +1 -0
  143. package/dist/bitmapRotate.js +143 -0
  144. package/dist/bitmapRotate.js.map +1 -0
  145. package/dist/bitmapShadow.d.ts +72 -0
  146. package/dist/bitmapShadow.d.ts.map +1 -0
  147. package/dist/bitmapShadow.js +175 -0
  148. package/dist/bitmapShadow.js.map +1 -0
  149. package/dist/bitmapSharpen.d.ts +16 -0
  150. package/dist/bitmapSharpen.d.ts.map +1 -0
  151. package/dist/bitmapSharpen.js +47 -0
  152. package/dist/bitmapSharpen.js.map +1 -0
  153. package/dist/bitmapTone.d.ts +28 -0
  154. package/dist/bitmapTone.d.ts.map +1 -0
  155. package/dist/bitmapTone.js +69 -0
  156. package/dist/bitmapTone.js.map +1 -0
  157. package/dist/bitmapTransform.d.ts +40 -0
  158. package/dist/bitmapTransform.d.ts.map +1 -0
  159. package/dist/bitmapTransform.js +163 -0
  160. package/dist/bitmapTransform.js.map +1 -0
  161. package/dist/bitmapWarp.d.ts +48 -0
  162. package/dist/bitmapWarp.d.ts.map +1 -0
  163. package/dist/bitmapWarp.js +284 -0
  164. package/dist/bitmapWarp.js.map +1 -0
  165. package/dist/contract.d.ts +43 -0
  166. package/dist/contract.d.ts.map +1 -0
  167. package/dist/contract.js +43 -0
  168. package/dist/contract.js.map +1 -0
  169. package/dist/explainBitmapReadback.d.ts +3 -0
  170. package/dist/explainBitmapReadback.d.ts.map +1 -0
  171. package/dist/explainBitmapReadback.js +39 -0
  172. package/dist/explainBitmapReadback.js.map +1 -0
  173. package/dist/index.d.ts +2 -0
  174. package/dist/index.d.ts.map +1 -0
  175. package/dist/index.js +2 -0
  176. package/dist/index.js.map +1 -0
  177. package/package.json +48 -0
  178. package/src/bitmap.test.ts +88 -0
  179. package/src/bitmapAffine.test.ts +98 -0
  180. package/src/bitmapAlpha.test.ts +110 -0
  181. package/src/bitmapBevel.test.ts +61 -0
  182. package/src/bitmapBlur.test.ts +234 -0
  183. package/src/bitmapChannel.test.ts +97 -0
  184. package/src/bitmapColorMatrix.test.ts +214 -0
  185. package/src/bitmapCompare.test.ts +92 -0
  186. package/src/bitmapComposite.test.ts +259 -0
  187. package/src/bitmapConvolution.test.ts +130 -0
  188. package/src/bitmapCopy.test.ts +48 -0
  189. package/src/bitmapCoverage.test.ts +39 -0
  190. package/src/bitmapCrop.test.ts +116 -0
  191. package/src/bitmapDisplacement.test.ts +181 -0
  192. package/src/bitmapDissolve.test.ts +99 -0
  193. package/src/bitmapDraw.test.ts +68 -0
  194. package/src/bitmapEncode.test.ts +18 -0
  195. package/src/bitmapFill.test.ts +83 -0
  196. package/src/bitmapFingerprint.test.ts +103 -0
  197. package/src/bitmapFlip.test.ts +53 -0
  198. package/src/bitmapFormat.test.ts +124 -0
  199. package/src/bitmapFrom.test.ts +86 -0
  200. package/src/bitmapGradient.test.ts +85 -0
  201. package/src/bitmapGradientFill.test.ts +107 -0
  202. package/src/bitmapHistogram.test.ts +64 -0
  203. package/src/bitmapImageChannel.test.ts +19 -0
  204. package/src/bitmapMedian.test.ts +39 -0
  205. package/src/bitmapMorphological.test.ts +69 -0
  206. package/src/bitmapNoise.test.ts +163 -0
  207. package/src/bitmapPaletteMap.test.ts +49 -0
  208. package/src/bitmapPixel.test.ts +117 -0
  209. package/src/bitmapPixelate.test.ts +40 -0
  210. package/src/bitmapQuery.test.ts +42 -0
  211. package/src/bitmapRegion.test.ts +34 -0
  212. package/src/bitmapResize.test.ts +106 -0
  213. package/src/bitmapRotate.test.ts +108 -0
  214. package/src/bitmapShadow.test.ts +159 -0
  215. package/src/bitmapSharpen.test.ts +44 -0
  216. package/src/bitmapTone.test.ts +104 -0
  217. package/src/bitmapTransform.test.ts +128 -0
  218. package/src/bitmapWarp.test.ts +118 -0
  219. package/src/explainBitmapReadback.test.ts +84 -0
@@ -0,0 +1,263 @@
1
+ import { extractBitmapPixels } from './bitmapComposite';
2
+ /**
3
+ * Single horizontal box blur pass using a sliding-window accumulator — O(n)
4
+ * per row regardless of radius. Reads from `source`, writes to `out`.
5
+ * `out` must not alias `source`.
6
+ */
7
+ export function blurBitmapPixelsHorizontal(out, source, width, height, radius) {
8
+ for (let y = 0; y < height; y++) {
9
+ const rowOffset = y * width;
10
+ let r = 0;
11
+ let g = 0;
12
+ let b = 0;
13
+ let a = 0;
14
+ let count = 0;
15
+ const initEnd = Math.min(radius + 1, width);
16
+ for (let x = 0; x < initEnd; x++) {
17
+ const i = (rowOffset + x) * 4;
18
+ r += source[i];
19
+ g += source[i + 1];
20
+ b += source[i + 2];
21
+ a += source[i + 3];
22
+ count++;
23
+ }
24
+ for (let x = 0; x < width; x++) {
25
+ const di = (rowOffset + x) * 4;
26
+ out[di] = Math.round(r / count);
27
+ out[di + 1] = Math.round(g / count);
28
+ out[di + 2] = Math.round(b / count);
29
+ out[di + 3] = Math.round(a / count);
30
+ const leaving = x - radius;
31
+ if (leaving >= 0) {
32
+ const li = (rowOffset + leaving) * 4;
33
+ r -= source[li];
34
+ g -= source[li + 1];
35
+ b -= source[li + 2];
36
+ a -= source[li + 3];
37
+ count--;
38
+ }
39
+ const entering = x + radius + 1;
40
+ if (entering < width) {
41
+ const ei = (rowOffset + entering) * 4;
42
+ r += source[ei];
43
+ g += source[ei + 1];
44
+ b += source[ei + 2];
45
+ a += source[ei + 3];
46
+ count++;
47
+ }
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Single horizontal weighted blur pass. Kernel weights are applied at each
53
+ * position; `kernel.length` must be odd (2 * radius + 1). Reads from
54
+ * `source`, writes to `out`. `out` must not alias `source`.
55
+ */
56
+ export function blurBitmapPixelsHorizontalWeighted(out, source, width, height, kernel) {
57
+ const radius = (kernel.length - 1) >> 1;
58
+ for (let y = 0; y < height; y++) {
59
+ for (let x = 0; x < width; x++) {
60
+ let r = 0;
61
+ let g = 0;
62
+ let b = 0;
63
+ let a = 0;
64
+ for (let k = 0; k < kernel.length; k++) {
65
+ const px = Math.max(0, Math.min(width - 1, x + k - radius));
66
+ const i = (y * width + px) * 4;
67
+ const w = kernel[k];
68
+ r += source[i] * w;
69
+ g += source[i + 1] * w;
70
+ b += source[i + 2] * w;
71
+ a += source[i + 3] * w;
72
+ }
73
+ const di = (y * width + x) * 4;
74
+ out[di] = Math.round(r);
75
+ out[di + 1] = Math.round(g);
76
+ out[di + 2] = Math.round(b);
77
+ out[di + 3] = Math.round(a);
78
+ }
79
+ }
80
+ }
81
+ /**
82
+ * Single vertical box blur pass using a sliding-window accumulator — O(n)
83
+ * per column regardless of radius. Reads from `source`, writes to `out`.
84
+ * `out` must not alias `source`.
85
+ */
86
+ export function blurBitmapPixelsVertical(out, source, width, height, radius) {
87
+ for (let x = 0; x < width; x++) {
88
+ let r = 0;
89
+ let g = 0;
90
+ let b = 0;
91
+ let a = 0;
92
+ let count = 0;
93
+ const initEnd = Math.min(radius + 1, height);
94
+ for (let y = 0; y < initEnd; y++) {
95
+ const i = (y * width + x) * 4;
96
+ r += source[i];
97
+ g += source[i + 1];
98
+ b += source[i + 2];
99
+ a += source[i + 3];
100
+ count++;
101
+ }
102
+ for (let y = 0; y < height; y++) {
103
+ const di = (y * width + x) * 4;
104
+ out[di] = Math.round(r / count);
105
+ out[di + 1] = Math.round(g / count);
106
+ out[di + 2] = Math.round(b / count);
107
+ out[di + 3] = Math.round(a / count);
108
+ const leaving = y - radius;
109
+ if (leaving >= 0) {
110
+ const li = (leaving * width + x) * 4;
111
+ r -= source[li];
112
+ g -= source[li + 1];
113
+ b -= source[li + 2];
114
+ a -= source[li + 3];
115
+ count--;
116
+ }
117
+ const entering = y + radius + 1;
118
+ if (entering < height) {
119
+ const ei = (entering * width + x) * 4;
120
+ r += source[ei];
121
+ g += source[ei + 1];
122
+ b += source[ei + 2];
123
+ a += source[ei + 3];
124
+ count++;
125
+ }
126
+ }
127
+ }
128
+ }
129
+ /**
130
+ * Single vertical weighted blur pass. Kernel weights are applied at each
131
+ * position; `kernel.length` must be odd (2 * radius + 1). Reads from
132
+ * `source`, writes to `out`. `out` must not alias `source`.
133
+ */
134
+ export function blurBitmapPixelsVerticalWeighted(out, source, width, height, kernel) {
135
+ const radius = (kernel.length - 1) >> 1;
136
+ for (let y = 0; y < height; y++) {
137
+ for (let x = 0; x < width; x++) {
138
+ let r = 0;
139
+ let g = 0;
140
+ let b = 0;
141
+ let a = 0;
142
+ for (let k = 0; k < kernel.length; k++) {
143
+ const py = Math.max(0, Math.min(height - 1, y + k - radius));
144
+ const i = (py * width + x) * 4;
145
+ const w = kernel[k];
146
+ r += source[i] * w;
147
+ g += source[i + 1] * w;
148
+ b += source[i + 2] * w;
149
+ a += source[i + 3] * w;
150
+ }
151
+ const di = (y * width + x) * 4;
152
+ out[di] = Math.round(r);
153
+ out[di + 1] = Math.round(g);
154
+ out[di + 2] = Math.round(b);
155
+ out[di + 3] = Math.round(a);
156
+ }
157
+ }
158
+ }
159
+ /**
160
+ * Applies a box blur to `source` and writes the result into `out`.
161
+ * `scratch` is a ping-pong buffer; its contents are undefined after the
162
+ * call. Both must be at least `source.width * source.height * 4` bytes.
163
+ *
164
+ * `radiusX` and `radiusY` are the blur radius in pixels (default 2). `passes`
165
+ * repeats the H+V pass pair (default 1); multiple passes approximate a Gaussian.
166
+ *
167
+ * Safe to pass `source.bitmap.data` as `out` when the region covers the
168
+ * full bitmap.
169
+ */
170
+ export function boxBlurBitmap(out, scratch, source, options = {}) {
171
+ const radiusX = Math.max(0, Math.round(options.radiusX ?? 2));
172
+ const radiusY = Math.max(0, Math.round(options.radiusY ?? 2));
173
+ const passes = Math.max(1, Math.round(options.passes ?? 1));
174
+ extractBitmapPixels(out, source);
175
+ let a = out;
176
+ let b = scratch;
177
+ for (let pass = 0; pass < passes; pass++) {
178
+ if (radiusX > 0) {
179
+ blurBitmapPixelsHorizontal(b, a, source.width, source.height, radiusX);
180
+ const t = a;
181
+ a = b;
182
+ b = t;
183
+ }
184
+ if (radiusY > 0) {
185
+ blurBitmapPixelsVertical(b, a, source.width, source.height, radiusY);
186
+ const t = a;
187
+ a = b;
188
+ b = t;
189
+ }
190
+ }
191
+ if (a !== out) {
192
+ out.set(a.subarray(0, source.width * source.height * 4));
193
+ }
194
+ }
195
+ /**
196
+ * Fills `out` with a normalized 1-D Gaussian kernel of length `2 * radius + 1`.
197
+ * `out` must be a `Float32Array` of exactly that length. Caller allocates once
198
+ * and reuses across frames.
199
+ */
200
+ export function computeGaussianKernel(out, radius, sigma) {
201
+ const len = 2 * radius + 1;
202
+ // sigma <= 0 has no spread: a unit impulse at the center (an identity blur).
203
+ // Computing exp(-x² / 0) would otherwise fill the kernel with NaN.
204
+ if (sigma <= 0) {
205
+ out.fill(0, 0, len);
206
+ out[radius] = 1;
207
+ return;
208
+ }
209
+ let sum = 0;
210
+ const twoSigmaSq = 2 * sigma * sigma;
211
+ for (let i = 0; i < len; i++) {
212
+ const x = i - radius;
213
+ out[i] = Math.exp(-(x * x) / twoSigmaSq);
214
+ sum += out[i];
215
+ }
216
+ for (let i = 0; i < len; i++) {
217
+ out[i] /= sum;
218
+ }
219
+ }
220
+ /**
221
+ * Applies a Gaussian blur to `source` and writes the result into `out`.
222
+ * `scratch` is a ping-pong buffer; its contents are undefined after the
223
+ * call. Both must be at least `source.width * source.height * 4` bytes.
224
+ *
225
+ * `sigmaX` and `sigmaY` are the standard deviation of the Gaussian (CSS
226
+ * `blur(Xpx)` uses sigma = X). `sigmaY` defaults to `sigmaX`. `passes`
227
+ * repeats the H+V pass pair (default 1).
228
+ *
229
+ * Safe to pass `source.bitmap.data` as `out` when the region covers the
230
+ * full bitmap.
231
+ */
232
+ export function gaussianBlurBitmap(out, scratch, source, sigmaX, sigmaY = sigmaX, passes = 1) {
233
+ const passCount = Math.max(1, Math.round(passes));
234
+ const radiusX = Math.max(0, Math.ceil(sigmaX * 3));
235
+ const radiusY = Math.max(0, Math.ceil(sigmaY * 3));
236
+ const kernelX = radiusX > 0 ? new Float32Array(2 * radiusX + 1) : null;
237
+ const kernelY = radiusY > 0 ? new Float32Array(2 * radiusY + 1) : null;
238
+ if (kernelX)
239
+ computeGaussianKernel(kernelX, radiusX, sigmaX);
240
+ if (kernelY)
241
+ computeGaussianKernel(kernelY, radiusY, sigmaY);
242
+ extractBitmapPixels(out, source);
243
+ let a = out;
244
+ let b = scratch;
245
+ for (let pass = 0; pass < passCount; pass++) {
246
+ if (kernelX) {
247
+ blurBitmapPixelsHorizontalWeighted(b, a, source.width, source.height, kernelX);
248
+ const t = a;
249
+ a = b;
250
+ b = t;
251
+ }
252
+ if (kernelY) {
253
+ blurBitmapPixelsVerticalWeighted(b, a, source.width, source.height, kernelY);
254
+ const t = a;
255
+ a = b;
256
+ b = t;
257
+ }
258
+ }
259
+ if (a !== out) {
260
+ out.set(a.subarray(0, source.width * source.height * 4));
261
+ }
262
+ }
263
+ //# sourceMappingURL=bitmapBlur.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapBlur.js","sourceRoot":"","sources":["../src/bitmapBlur.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Bitmap, BitmapRegion } from '@flighthq/types/contract';
2
+ /**
3
+ * Merges four single-channel bitmaps (or any full-RGBA bitmaps) into `out`
4
+ * by taking one channel from each input bitmap:
5
+ * - `out.R` ← `r.R` (red channel of the red-source bitmap)
6
+ * - `out.G` ← `g.G`
7
+ * - `out.B` ← `b.B`
8
+ * - `out.A` ← `a.A`
9
+ *
10
+ * All inputs and `out` must have the same dimensions. The copied size is the
11
+ * minimum overlap of all five bitmaps. Pixels outside any bitmap are skipped.
12
+ */
13
+ export declare function mergeBitmapChannels(out: Readonly<BitmapRegion>, r: Readonly<BitmapRegion>, g: Readonly<BitmapRegion>, b: Readonly<BitmapRegion>, a: Readonly<BitmapRegion>): void;
14
+ /**
15
+ * Splits `source` into four single-channel grayscale bitmaps (R, G, B, A).
16
+ * Each output bitmap is the same dimensions as `source`; each pixel's value
17
+ * is taken from the corresponding channel of the source pixel and written to
18
+ * the R, G, B, and A channels of the output (i.e. a red value of 0xAA produces
19
+ * 0xAAAAAAAA in the R bitmap).
20
+ *
21
+ * Returns an array of four bitmaps in RGBA order: `[r, g, b, a]`.
22
+ */
23
+ export declare function splitBitmapChannels(source: Readonly<Bitmap>): [Bitmap, Bitmap, Bitmap, Bitmap];
24
+ //# sourceMappingURL=bitmapChannel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapChannel.d.ts","sourceRoot":"","sources":["../src/bitmapChannel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKrE;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC3B,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,GACxB,IAAI,CAsDN;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAuC9F"}
@@ -0,0 +1,127 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { BitmapTextureSourceKind } from '@flighthq/types/contract';
3
+ import { invalidateBitmap } from './bitmap';
4
+ /**
5
+ * Merges four single-channel bitmaps (or any full-RGBA bitmaps) into `out`
6
+ * by taking one channel from each input bitmap:
7
+ * - `out.R` ← `r.R` (red channel of the red-source bitmap)
8
+ * - `out.G` ← `g.G`
9
+ * - `out.B` ← `b.B`
10
+ * - `out.A` ← `a.A`
11
+ *
12
+ * All inputs and `out` must have the same dimensions. The copied size is the
13
+ * minimum overlap of all five bitmaps. Pixels outside any bitmap are skipped.
14
+ */
15
+ export function mergeBitmapChannels(out, r, g, b, a) {
16
+ const w = Math.min(out.width, r.width, g.width, b.width, a.width);
17
+ const h = Math.min(out.height, r.height, g.height, b.height, a.height);
18
+ const od = out.bitmap.data;
19
+ const rd = r.bitmap.data;
20
+ const gd = g.bitmap.data;
21
+ const bd = b.bitmap.data;
22
+ const ad = a.bitmap.data;
23
+ for (let py = 0; py < h; py++) {
24
+ const oy = out.y + py;
25
+ const ry = r.y + py;
26
+ const gy = g.y + py;
27
+ const by = b.y + py;
28
+ const ay = a.y + py;
29
+ if (oy < 0 ||
30
+ oy >= out.bitmap.height ||
31
+ ry < 0 ||
32
+ ry >= r.bitmap.height ||
33
+ gy < 0 ||
34
+ gy >= g.bitmap.height ||
35
+ by < 0 ||
36
+ by >= b.bitmap.height ||
37
+ ay < 0 ||
38
+ ay >= a.bitmap.height)
39
+ continue;
40
+ for (let px = 0; px < w; px++) {
41
+ const ox = out.x + px;
42
+ const rx = r.x + px;
43
+ const gx = g.x + px;
44
+ const bx = b.x + px;
45
+ const ax = a.x + px;
46
+ if (ox < 0 ||
47
+ ox >= out.bitmap.width ||
48
+ rx < 0 ||
49
+ rx >= r.bitmap.width ||
50
+ gx < 0 ||
51
+ gx >= g.bitmap.width ||
52
+ bx < 0 ||
53
+ bx >= b.bitmap.width ||
54
+ ax < 0 ||
55
+ ax >= a.bitmap.width)
56
+ continue;
57
+ const di = (oy * out.bitmap.width + ox) * 4;
58
+ od[di] = rd[(ry * r.bitmap.width + rx) * 4];
59
+ od[di + 1] = gd[(gy * g.bitmap.width + gx) * 4 + 1];
60
+ od[di + 2] = bd[(by * b.bitmap.width + bx) * 4 + 2];
61
+ od[di + 3] = ad[(ay * a.bitmap.width + ax) * 4 + 3];
62
+ }
63
+ }
64
+ invalidateBitmap(out.bitmap);
65
+ }
66
+ /**
67
+ * Splits `source` into four single-channel grayscale bitmaps (R, G, B, A).
68
+ * Each output bitmap is the same dimensions as `source`; each pixel's value
69
+ * is taken from the corresponding channel of the source pixel and written to
70
+ * the R, G, B, and A channels of the output (i.e. a red value of 0xAA produces
71
+ * 0xAAAAAAAA in the R bitmap).
72
+ *
73
+ * Returns an array of four bitmaps in RGBA order: `[r, g, b, a]`.
74
+ */
75
+ export function splitBitmapChannels(source) {
76
+ const w = source.width;
77
+ const h = source.height;
78
+ const sd = source.data;
79
+ const rData = new Uint8ClampedArray(w * h * 4);
80
+ const gData = new Uint8ClampedArray(w * h * 4);
81
+ const bData = new Uint8ClampedArray(w * h * 4);
82
+ const aData = new Uint8ClampedArray(w * h * 4);
83
+ for (let i = 0; i < w * h; i++) {
84
+ const si = i * 4;
85
+ const r = sd[si];
86
+ const g = sd[si + 1];
87
+ const b = sd[si + 2];
88
+ const a = sd[si + 3];
89
+ rData[si] = r;
90
+ rData[si + 1] = r;
91
+ rData[si + 2] = r;
92
+ rData[si + 3] = 0xff;
93
+ gData[si] = g;
94
+ gData[si + 1] = g;
95
+ gData[si + 2] = g;
96
+ gData[si + 3] = 0xff;
97
+ bData[si] = b;
98
+ bData[si + 1] = b;
99
+ bData[si + 2] = b;
100
+ bData[si + 3] = 0xff;
101
+ aData[si] = a;
102
+ aData[si + 1] = a;
103
+ aData[si + 2] = a;
104
+ // Store the alpha value in the A channel position so round-trip
105
+ // split → merge restores the original alpha.
106
+ aData[si + 3] = a;
107
+ }
108
+ return [
109
+ makeBitmap(rData, w, h, source),
110
+ makeBitmap(gData, w, h, source),
111
+ makeBitmap(bData, w, h, source),
112
+ makeBitmap(aData, w, h, source),
113
+ ];
114
+ }
115
+ function makeBitmap(data, width, height, source) {
116
+ return createEntity({
117
+ alphaType: source.alphaType,
118
+ colorSpace: source.colorSpace,
119
+ data,
120
+ format: source.format,
121
+ height,
122
+ kind: BitmapTextureSourceKind,
123
+ version: 0,
124
+ width,
125
+ });
126
+ }
127
+ //# sourceMappingURL=bitmapChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapChannel.js","sourceRoot":"","sources":["../src/bitmapChannel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { BitmapRegion } from '@flighthq/types/contract';
2
+ /**
3
+ * Writes a brightness color matrix into `out` (length 20). Multiplies RGB by
4
+ * `amount` (CSS `brightness()` semantics): 1 is identity, 0 is black, >1 brightens.
5
+ */
6
+ export declare function buildBitmapBrightnessColorMatrix(out: number[], amount: number): void;
7
+ /**
8
+ * Writes a contrast color matrix into `out` (length 20). Scales RGB around the
9
+ * midpoint (CSS `contrast()` semantics): 1 is identity, 0 is flat grey, >1 raises
10
+ * contrast.
11
+ */
12
+ export declare function buildBitmapContrastColorMatrix(out: number[], amount: number): void;
13
+ /**
14
+ * Writes a grayscale color matrix into `out` (length 20). Equivalent to
15
+ * `buildBitmapSaturationColorMatrix(out, 0)`; uses the W3C luma coefficients.
16
+ */
17
+ export declare function buildBitmapGrayscaleColorMatrix(out: number[]): void;
18
+ /**
19
+ * Writes a hue-rotation color matrix into `out` (length 20). `degrees` rotates
20
+ * hue around the luma axis (CSS `hue-rotate()` semantics, W3C coefficients).
21
+ * 0° is identity; 180° inverts hue; values outside 0..360 wrap naturally.
22
+ */
23
+ export declare function buildBitmapHueRotationColorMatrix(out: number[], degrees: number): void;
24
+ /**
25
+ * Writes an invert color matrix into `out` (length 20). Inverts RGB
26
+ * (`255 - channel`); alpha is preserved.
27
+ */
28
+ export declare function buildBitmapInvertColorMatrix(out: number[]): void;
29
+ /**
30
+ * Writes a saturation color matrix into `out` (length 20). `amount` is 1 for
31
+ * identity, 0 for grayscale, >1 for oversaturated (CSS `saturate()` semantics,
32
+ * W3C luma coefficients).
33
+ */
34
+ export declare function buildBitmapSaturationColorMatrix(out: number[], amount: number): void;
35
+ /**
36
+ * Writes a sepia color matrix into `out` (length 20), matching CSS `sepia(1)`.
37
+ */
38
+ export declare function buildBitmapSepiaColorMatrix(out: number[]): void;
39
+ /**
40
+ * Applies a 4×5 color matrix to `source` and writes into `out`.
41
+ * `out` must be at least `source.width * source.height * 4` bytes.
42
+ *
43
+ * Safe to pass `source.bitmap.data` as `out` when the region covers the
44
+ * full bitmap — each pixel's input channels are read before any channel
45
+ * of that pixel is written.
46
+ */
47
+ export declare function colorMatrixBitmap(out: Uint8ClampedArray, source: Readonly<BitmapRegion>, matrix: ReadonlyArray<number>): void;
48
+ /**
49
+ * Composes two 4×5 color matrices into `out` (length 20): the result applies
50
+ * `first`, then `second`. `out` must not alias `first` or `second`.
51
+ */
52
+ export declare function concatBitmapColorMatrix(out: number[], first: ReadonlyArray<number>, second: ReadonlyArray<number>): void;
53
+ /**
54
+ * Writes the identity color matrix into `out` (length 20).
55
+ */
56
+ export declare function setBitmapColorMatrixIdentity(out: number[]): void;
57
+ //# sourceMappingURL=bitmapColorMatrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapColorMatrix.d.ts","sourceRoot":"","sources":["../src/bitmapColorMatrix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAK7D;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEpF;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGlF;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA2BtF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMpF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAqBN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EAAE,EACb,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAC5B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAEhE"}
@@ -0,0 +1,127 @@
1
+ // 4×5 color matrices are row-major: 4 rows (R, G, B, A output), each with 5
2
+ // columns (R, G, B, A multipliers + a constant offset in 0..255 units).
3
+ /**
4
+ * Writes a brightness color matrix into `out` (length 20). Multiplies RGB by
5
+ * `amount` (CSS `brightness()` semantics): 1 is identity, 0 is black, >1 brightens.
6
+ */
7
+ export function buildBitmapBrightnessColorMatrix(out, amount) {
8
+ setColorMatrix(out, amount, 0, 0, 0, 0, 0, amount, 0, 0, 0, 0, 0, amount, 0, 0, 0, 0, 0, 1, 0);
9
+ }
10
+ /**
11
+ * Writes a contrast color matrix into `out` (length 20). Scales RGB around the
12
+ * midpoint (CSS `contrast()` semantics): 1 is identity, 0 is flat grey, >1 raises
13
+ * contrast.
14
+ */
15
+ export function buildBitmapContrastColorMatrix(out, amount) {
16
+ const t = 127.5 * (1 - amount);
17
+ setColorMatrix(out, amount, 0, 0, 0, t, 0, amount, 0, 0, t, 0, 0, amount, 0, t, 0, 0, 0, 1, 0);
18
+ }
19
+ /**
20
+ * Writes a grayscale color matrix into `out` (length 20). Equivalent to
21
+ * `buildBitmapSaturationColorMatrix(out, 0)`; uses the W3C luma coefficients.
22
+ */
23
+ export function buildBitmapGrayscaleColorMatrix(out) {
24
+ buildBitmapSaturationColorMatrix(out, 0);
25
+ }
26
+ /**
27
+ * Writes a hue-rotation color matrix into `out` (length 20). `degrees` rotates
28
+ * hue around the luma axis (CSS `hue-rotate()` semantics, W3C coefficients).
29
+ * 0° is identity; 180° inverts hue; values outside 0..360 wrap naturally.
30
+ */
31
+ export function buildBitmapHueRotationColorMatrix(out, degrees) {
32
+ const radians = (degrees * Math.PI) / 180;
33
+ const c = Math.cos(radians);
34
+ const s = Math.sin(radians);
35
+ setColorMatrix(out, 0.213 + c * 0.787 - s * 0.213, 0.715 - c * 0.715 - s * 0.715, 0.072 - c * 0.072 + s * 0.928, 0, 0, 0.213 - c * 0.213 + s * 0.143, 0.715 + c * 0.285 + s * 0.14, 0.072 - c * 0.072 - s * 0.283, 0, 0, 0.213 - c * 0.213 - s * 0.787, 0.715 - c * 0.715 + s * 0.715, 0.072 + c * 0.928 + s * 0.072, 0, 0, 0, 0, 0, 1, 0);
36
+ }
37
+ /**
38
+ * Writes an invert color matrix into `out` (length 20). Inverts RGB
39
+ * (`255 - channel`); alpha is preserved.
40
+ */
41
+ export function buildBitmapInvertColorMatrix(out) {
42
+ setColorMatrix(out, -1, 0, 0, 0, 255, 0, -1, 0, 0, 255, 0, 0, -1, 0, 255, 0, 0, 0, 1, 0);
43
+ }
44
+ /**
45
+ * Writes a saturation color matrix into `out` (length 20). `amount` is 1 for
46
+ * identity, 0 for grayscale, >1 for oversaturated (CSS `saturate()` semantics,
47
+ * W3C luma coefficients).
48
+ */
49
+ export function buildBitmapSaturationColorMatrix(out, amount) {
50
+ const inv = 1 - amount;
51
+ const r = LUMA_R * inv;
52
+ const g = LUMA_G * inv;
53
+ const b = LUMA_B * inv;
54
+ setColorMatrix(out, r + amount, g, b, 0, 0, r, g + amount, b, 0, 0, r, g, b + amount, 0, 0, 0, 0, 0, 1, 0);
55
+ }
56
+ /**
57
+ * Writes a sepia color matrix into `out` (length 20), matching CSS `sepia(1)`.
58
+ */
59
+ export function buildBitmapSepiaColorMatrix(out) {
60
+ setColorMatrix(out, 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131, 0, 0, 0, 0, 0, 1, 0);
61
+ }
62
+ /**
63
+ * Applies a 4×5 color matrix to `source` and writes into `out`.
64
+ * `out` must be at least `source.width * source.height * 4` bytes.
65
+ *
66
+ * Safe to pass `source.bitmap.data` as `out` when the region covers the
67
+ * full bitmap — each pixel's input channels are read before any channel
68
+ * of that pixel is written.
69
+ */
70
+ export function colorMatrixBitmap(out, source, matrix) {
71
+ if (matrix.length < 20)
72
+ throw new Error('Color matrix filter requires 20 values');
73
+ for (let py = 0; py < source.height; py++) {
74
+ const sourceY = source.y + py;
75
+ if (sourceY < 0 || sourceY >= source.bitmap.height)
76
+ continue;
77
+ for (let px = 0; px < source.width; px++) {
78
+ const sourceX = source.x + px;
79
+ if (sourceX < 0 || sourceX >= source.bitmap.width)
80
+ continue;
81
+ const si = (sourceY * source.bitmap.width + sourceX) * 4;
82
+ const di = (py * source.width + px) * 4;
83
+ const r = source.bitmap.data[si];
84
+ const g = source.bitmap.data[si + 1];
85
+ const b = source.bitmap.data[si + 2];
86
+ const a = source.bitmap.data[si + 3];
87
+ out[di] = clampByte(r * matrix[0] + g * matrix[1] + b * matrix[2] + a * matrix[3] + matrix[4]);
88
+ out[di + 1] = clampByte(r * matrix[5] + g * matrix[6] + b * matrix[7] + a * matrix[8] + matrix[9]);
89
+ out[di + 2] = clampByte(r * matrix[10] + g * matrix[11] + b * matrix[12] + a * matrix[13] + matrix[14]);
90
+ out[di + 3] = clampByte(r * matrix[15] + g * matrix[16] + b * matrix[17] + a * matrix[18] + matrix[19]);
91
+ }
92
+ }
93
+ }
94
+ /**
95
+ * Composes two 4×5 color matrices into `out` (length 20): the result applies
96
+ * `first`, then `second`. `out` must not alias `first` or `second`.
97
+ */
98
+ export function concatBitmapColorMatrix(out, first, second) {
99
+ for (let row = 0; row < 4; row++) {
100
+ for (let col = 0; col < 5; col++) {
101
+ let sum = col === 4 ? second[row * 5 + 4] : 0;
102
+ for (let k = 0; k < 4; k++) {
103
+ sum += second[row * 5 + k] * (col === 4 ? first[k * 5 + 4] : first[k * 5 + col]);
104
+ }
105
+ out[row * 5 + col] = sum;
106
+ }
107
+ }
108
+ }
109
+ /**
110
+ * Writes the identity color matrix into `out` (length 20).
111
+ */
112
+ export function setBitmapColorMatrixIdentity(out) {
113
+ setColorMatrix(out, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0);
114
+ }
115
+ // W3C luma coefficients (matching CSS saturate/grayscale), so the CPU result
116
+ // agrees with the eventual CSS filter backend.
117
+ const LUMA_R = 0.213;
118
+ const LUMA_G = 0.715;
119
+ const LUMA_B = 0.072;
120
+ function clampByte(value) {
121
+ return Math.max(0, Math.min(255, Math.round(value)));
122
+ }
123
+ function setColorMatrix(out, ...values) {
124
+ for (let i = 0; i < 20; i++)
125
+ out[i] = values[i];
126
+ }
127
+ //# sourceMappingURL=bitmapColorMatrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapColorMatrix.js","sourceRoot":"","sources":["../src/bitmapColorMatrix.ts"],"names":[],"mappings":"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"}