image-js 1.0.0 → 1.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.
Files changed (76) hide show
  1. package/dist/image-js.esm.js +866 -198
  2. package/dist/image-js.esm.js.map +1 -1
  3. package/dist/image-js.esm.min.js +2 -2
  4. package/dist/image-js.esm.min.js.map +1 -1
  5. package/dist/image-js.umd.js +866 -198
  6. package/dist/image-js.umd.js.map +1 -1
  7. package/dist/image-js.umd.min.js +2 -2
  8. package/dist/image-js.umd.min.js.map +1 -1
  9. package/dist-types/image-js.d.ts +2 -3
  10. package/lib/Mask.d.ts +1 -1
  11. package/lib/Mask.js +1 -1
  12. package/lib/featureMatching/matching/filterEuclideanDistance.d.ts.map +1 -1
  13. package/lib/featureMatching/matching/filterEuclideanDistance.js +6 -7
  14. package/lib/featureMatching/matching/filterEuclideanDistance.js.map +1 -1
  15. package/lib/featureMatching/matching/filterSmallestDistanceMatches.d.ts.map +1 -1
  16. package/lib/featureMatching/matching/filterSmallestDistanceMatches.js +6 -3
  17. package/lib/featureMatching/matching/filterSmallestDistanceMatches.js.map +1 -1
  18. package/lib/featureMatching/utils/sortByDistance.d.ts.map +1 -1
  19. package/lib/featureMatching/utils/sortByDistance.js +3 -1
  20. package/lib/featureMatching/utils/sortByDistance.js.map +1 -1
  21. package/lib/featureMatching/utils/sortBySourceDest.d.ts.map +1 -1
  22. package/lib/featureMatching/utils/sortBySourceDest.js +6 -2
  23. package/lib/featureMatching/utils/sortBySourceDest.js.map +1 -1
  24. package/lib/load/decode.d.ts.map +1 -1
  25. package/lib/load/decode.js +2 -0
  26. package/lib/load/decode.js.map +1 -1
  27. package/lib/load/decodeBmp.d.ts +8 -0
  28. package/lib/load/decodeBmp.d.ts.map +1 -0
  29. package/lib/load/decodeBmp.js +36 -0
  30. package/lib/load/decodeBmp.js.map +1 -0
  31. package/lib/load/decodePng.d.ts.map +1 -1
  32. package/lib/load/decodePng.js +29 -5
  33. package/lib/load/decodePng.js.map +1 -1
  34. package/lib/load/decodeTiff.d.ts.map +1 -1
  35. package/lib/load/decodeTiff.js +44 -21
  36. package/lib/load/decodeTiff.js.map +1 -1
  37. package/lib/maskAnalysis/utils/getMbrAngle.d.ts.map +1 -1
  38. package/lib/maskAnalysis/utils/getMbrAngle.js +2 -1
  39. package/lib/maskAnalysis/utils/getMbrAngle.js.map +1 -1
  40. package/lib/maskAnalysis/utils/monotoneChainConvexHull.d.ts.map +1 -1
  41. package/lib/maskAnalysis/utils/monotoneChainConvexHull.js +2 -1
  42. package/lib/maskAnalysis/utils/monotoneChainConvexHull.js.map +1 -1
  43. package/lib/save/encodeBmp.d.ts +4 -4
  44. package/lib/save/encodeBmp.d.ts.map +1 -1
  45. package/lib/save/encodeBmp.js +22 -14
  46. package/lib/save/encodeBmp.js.map +1 -1
  47. package/lib/stack/load/decodeApng.d.ts +8 -0
  48. package/lib/stack/load/decodeApng.d.ts.map +1 -0
  49. package/lib/stack/load/decodeApng.js +60 -0
  50. package/lib/stack/load/decodeApng.js.map +1 -0
  51. package/lib/stack/load/decodeStack.d.ts.map +1 -1
  52. package/lib/stack/load/decodeStack.js +2 -0
  53. package/lib/stack/load/decodeStack.js.map +1 -1
  54. package/lib/utils/geometry/points.d.ts.map +1 -1
  55. package/lib/utils/geometry/points.js +3 -1
  56. package/lib/utils/geometry/points.js.map +1 -1
  57. package/lib/utils/geometry/removeClosePoints.d.ts.map +1 -1
  58. package/lib/utils/geometry/removeClosePoints.js +2 -1
  59. package/lib/utils/geometry/removeClosePoints.js.map +1 -1
  60. package/package.json +27 -27
  61. package/src/Mask.ts +1 -1
  62. package/src/featureMatching/matching/filterEuclideanDistance.ts +6 -13
  63. package/src/featureMatching/matching/filterSmallestDistanceMatches.ts +6 -9
  64. package/src/featureMatching/utils/sortByDistance.ts +3 -1
  65. package/src/featureMatching/utils/sortBySourceDest.ts +6 -2
  66. package/src/load/decode.ts +2 -1
  67. package/src/load/decodeBmp.ts +37 -0
  68. package/src/load/decodePng.ts +39 -7
  69. package/src/load/decodeTiff.ts +53 -22
  70. package/src/maskAnalysis/utils/getMbrAngle.ts +2 -1
  71. package/src/maskAnalysis/utils/monotoneChainConvexHull.ts +2 -1
  72. package/src/save/encodeBmp.ts +22 -15
  73. package/src/stack/load/decodeApng.ts +71 -0
  74. package/src/stack/load/decodeStack.ts +2 -0
  75. package/src/utils/geometry/points.ts +3 -1
  76. package/src/utils/geometry/removeClosePoints.ts +2 -1
@@ -1,6 +1,5 @@
1
1
  import type { BitDepth as BitDepth_2 } from 'fast-png';
2
2
  import { decode as decode_2 } from 'tiff';
3
- import { Image as Image_3 } from '../Image.ts';
4
3
  import type { PngEncoderOptions } from 'fast-png';
5
4
 
6
5
  /**
@@ -1279,7 +1278,7 @@ export declare interface FeretDiameter {
1279
1278
  * @param dataUrl - Image URL.
1280
1279
  * @returns decoded image data.
1281
1280
  */
1282
- export declare function fetchURL(dataUrl: string): Promise<Image_3>;
1281
+ export declare function fetchURL(dataUrl: string): Promise<Image_2>;
1283
1282
 
1284
1283
  /**
1285
1284
  * Apply a flip filter to an image.
@@ -2715,7 +2714,7 @@ export declare class Mask {
2715
2714
  setBitByIndex(index: number, value: BitValue): void;
2716
2715
  /**
2717
2716
  * Get the number of pixels that do not have the value 0.
2718
- * @returns
2717
+ * @returns The number of non-zero pixels.
2719
2718
  */
2720
2719
  getNbNonZeroPixels(): number;
2721
2720
  /**
package/lib/Mask.d.ts CHANGED
@@ -156,7 +156,7 @@ export declare class Mask {
156
156
  setBitByIndex(index: number, value: BitValue): void;
157
157
  /**
158
158
  * Get the number of pixels that do not have the value 0.
159
- * @returns
159
+ * @returns The number of non-zero pixels.
160
160
  */
161
161
  getNbNonZeroPixels(): number;
162
162
  /**
package/lib/Mask.js CHANGED
@@ -209,7 +209,7 @@ export class Mask {
209
209
  }
210
210
  /**
211
211
  * Get the number of pixels that do not have the value 0.
212
- * @returns
212
+ * @returns The number of non-zero pixels.
213
213
  */
214
214
  getNbNonZeroPixels() {
215
215
  let count = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"filterEuclideanDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,qCAAqC;IACpD;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,EAAE,EAChB,eAAe,EAAE,YAAY,EAAE,EAC/B,oBAAoB,EAAE,YAAY,EAAE,EACpC,OAAO,GAAE,qCAA0C,GAClD,KAAK,EAAE,CA2CT"}
1
+ {"version":3,"file":"filterEuclideanDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,qCAAqC;IACpD;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,EAAE,EAChB,eAAe,EAAE,YAAY,EAAE,EAC/B,oBAAoB,EAAE,YAAY,EAAE,EACpC,OAAO,GAAE,qCAA0C,GAClD,KAAK,EAAE,CAoCT"}
@@ -9,7 +9,8 @@
9
9
  */
10
10
  export function filterEuclideanDistance(matches, sourceKeypoints, destinationKeypoints, options = {}) {
11
11
  const { origin = { column: 0, row: 0 } } = options;
12
- const sorted = matches.sort((a, b) => a.destinationIndex - b.destinationIndex);
12
+ const sorted = matches.slice();
13
+ sorted.sort((a, b) => a.destinationIndex - b.destinationIndex);
13
14
  const result = [];
14
15
  let sameDestMatches = [];
15
16
  let currentIndex = sorted[0].destinationIndex;
@@ -18,16 +19,14 @@ export function filterEuclideanDistance(matches, sourceKeypoints, destinationKey
18
19
  sameDestMatches.push(match);
19
20
  }
20
21
  else {
21
- result.push(...sameDestMatches
22
- .sort((a, b) => distanceSquared(a) - distanceSquared(b))
23
- .slice(0, 1));
22
+ sameDestMatches.sort((a, b) => distanceSquared(a) - distanceSquared(b));
23
+ result.push(...sameDestMatches.slice(0, 1));
24
24
  currentIndex = match.destinationIndex;
25
25
  sameDestMatches = [match];
26
26
  }
27
27
  }
28
- result.push(...sameDestMatches
29
- .sort((a, b) => distanceSquared(a) - distanceSquared(b))
30
- .slice(0, 1));
28
+ sameDestMatches.sort((a, b) => distanceSquared(a) - distanceSquared(b));
29
+ result.push(...sameDestMatches.slice(0, 1));
31
30
  return result;
32
31
  function distanceSquared(match) {
33
32
  return ((sourceKeypoints[match.sourceIndex].origin.row -
@@ -1 +1 @@
1
- {"version":3,"file":"filterEuclideanDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,eAA+B,EAC/B,oBAAoC,EACpC,UAAiD,EAAE;IAEnD,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAClD,CAAC;IAEF,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAY,EAAE,CAAC;IAClC,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CACT,GAAG,eAAe;iBACf,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;iBACvD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACf,CAAC;YAEF,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACtC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CACT,GAAG,eAAe;SACf,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;SACvD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACf,CAAC;IACF,OAAO,MAAM,CAAC;IAEd,SAAS,eAAe,CAAC,KAAY;QACnC,OAAO,CACL,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG;YAC5C,CAAC,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG;gBACtD,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;YACH,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM;gBAC/C,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM;gBAC1D,MAAM,CAAC,MAAM,CAAC;gBACd,CAAC,CACJ,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"filterEuclideanDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterEuclideanDistance.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,eAA+B,EAC/B,oBAAoC,EACpC,UAAiD,EAAE;IAEnD,MAAM,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAY,EAAE,CAAC;IAClC,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE5C,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACtC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;IAEd,SAAS,eAAe,CAAC,KAAY;QACnC,OAAO,CACL,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG;YAC5C,CAAC,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG;gBACtD,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;YACH,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM;gBAC/C,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM;gBAC1D,MAAM,CAAC,MAAM,CAAC;gBACd,CAAC,CACJ,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"filterSmallestDistanceMatches.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAwBvE"}
1
+ {"version":3,"file":"filterSmallestDistanceMatches.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAqBvE"}
@@ -5,7 +5,8 @@
5
5
  * @returns Only the matches from source to destination with the smallest distance.
6
6
  */
7
7
  export function filterSmallestDistanceMatches(matches) {
8
- const sorted = matches.sort((a, b) => a.destinationIndex - b.destinationIndex);
8
+ const sorted = matches.slice();
9
+ sorted.sort((a, b) => a.destinationIndex - b.destinationIndex);
9
10
  const result = [];
10
11
  let sameDestMatches = [];
11
12
  let currentIndex = sorted[0].destinationIndex;
@@ -14,12 +15,14 @@ export function filterSmallestDistanceMatches(matches) {
14
15
  sameDestMatches.push(match);
15
16
  }
16
17
  else {
17
- result.push(...sameDestMatches.sort((a, b) => a.distance - b.distance).slice(0, 1));
18
+ sameDestMatches.sort((a, b) => a.distance - b.distance);
19
+ result.push(...sameDestMatches.slice(0, 1));
18
20
  currentIndex = match.destinationIndex;
19
21
  sameDestMatches = [match];
20
22
  }
21
23
  }
22
- result.push(...sameDestMatches.sort((a, b) => a.distance - b.distance).slice(0, 1));
24
+ sameDestMatches.sort((a, b) => a.distance - b.distance);
25
+ result.push(...sameDestMatches.slice(0, 1));
23
26
  return result;
24
27
  }
25
28
  //# sourceMappingURL=filterSmallestDistanceMatches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterSmallestDistanceMatches.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAClD,CAAC;IAEF,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAY,EAAE,CAAC;IAClC,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CACT,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACvE,CAAC;YAEF,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACtC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CACT,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACvE,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"filterSmallestDistanceMatches.js","sourceRoot":"","sources":["../../../src/featureMatching/matching/filterSmallestDistanceMatches.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAY,EAAE,CAAC;IAClC,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE5C,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACtC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sortByDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAIxD"}
1
+ {"version":3,"file":"sortByDistance.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAMxD"}
@@ -4,8 +4,10 @@
4
4
  * @returns Sorted copy of the array of matches.
5
5
  */
6
6
  export function sortByDistance(matches) {
7
- return matches.slice().sort((match1, match2) => {
7
+ const sorted = matches.slice();
8
+ sorted.sort((match1, match2) => {
8
9
  return match1.distance - match2.distance;
9
10
  });
11
+ return sorted;
10
12
  }
11
13
  //# sourceMappingURL=sortByDistance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sortByDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7C,OAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"sortByDistance.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortByDistance.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7B,OAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sortBySourceDest.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAM1D"}
1
+ {"version":3,"file":"sortBySourceDest.d.ts","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAQ1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAQ1D"}
@@ -4,13 +4,15 @@
4
4
  * @returns Sorted copy of the array of matches.
5
5
  */
6
6
  export function sortBySourceDest(matches) {
7
- return matches.slice().sort((match1, match2) => {
7
+ const sorted = matches.slice();
8
+ sorted.sort((match1, match2) => {
8
9
  if (match1.sourceIndex < match2.sourceIndex)
9
10
  return -1;
10
11
  if (match1.sourceIndex > match2.sourceIndex)
11
12
  return 1;
12
13
  return match1.destinationIndex - match2.destinationIndex;
13
14
  });
15
+ return sorted;
14
16
  }
15
17
  /**
16
18
  * Sort array of matches by destination index and then source index.
@@ -18,12 +20,14 @@ export function sortBySourceDest(matches) {
18
20
  * @returns Sorted copy of the array of matches.
19
21
  */
20
22
  export function sortByDestSource(matches) {
21
- return matches.slice().sort((match1, match2) => {
23
+ const sorted = matches.slice();
24
+ sorted.sort((match1, match2) => {
22
25
  if (match1.destinationIndex < match2.destinationIndex)
23
26
  return -1;
24
27
  if (match1.destinationIndex > match2.destinationIndex)
25
28
  return 1;
26
29
  return match1.sourceIndex - match2.sourceIndex;
27
30
  });
31
+ return sorted;
28
32
  }
29
33
  //# sourceMappingURL=sortBySourceDest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sortBySourceDest.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7C,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7C,IAAI,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"sortBySourceDest.js","sourceRoot":"","sources":["../../../src/featureMatching/utils/sortBySourceDest.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,KAAK,CAcnD"}
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,KAAK,CAenD"}
@@ -1,5 +1,6 @@
1
1
  import imageType from 'image-type';
2
2
  import { match } from 'ts-pattern';
3
+ import { decodeBmp } from "./decodeBmp.js";
3
4
  import { decodeJpeg } from './decodeJpeg.js';
4
5
  import { decodePng } from './decodePng.js';
5
6
  import { decodeTiff } from './decodeTiff.js';
@@ -16,6 +17,7 @@ export function decode(data) {
16
17
  .with({ mime: 'image/png' }, () => decodePng(typedArray))
17
18
  .with({ mime: 'image/jpeg' }, () => decodeJpeg(typedArray))
18
19
  .with({ mime: 'image/tiff' }, () => decodeTiff(typedArray))
20
+ .with({ mime: 'image/bmp' }, () => decodeBmp(typedArray))
19
21
  .otherwise(() => {
20
22
  throw new RangeError(`invalid data format: ${type?.mime}`);
21
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,IAAqB;IAC1C,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,CAChB,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC;SACf,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACxD,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC1D,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC1D,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,UAAU,CAAC,wBAAwB,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/load/decode.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,IAAqB;IAC1C,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,CAChB,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC;SACf,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACxD,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC1D,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC1D,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACxD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,UAAU,CAAC,wBAAwB,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Image } from '../Image.ts';
2
+ /**
3
+ * Decode a BMP. See the fast-bmp npm module.
4
+ * @param data - The data to decode.
5
+ * @returns The decoded image or mask.
6
+ */
7
+ export declare function decodeBmp(data: Uint8Array): Image;
8
+ //# sourceMappingURL=decodeBmp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decodeBmp.d.ts","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAyBjD"}
@@ -0,0 +1,36 @@
1
+ import { decode } from 'fast-bmp';
2
+ import { Image } from "../Image.js";
3
+ import { Mask } from "../Mask.js";
4
+ /**
5
+ * Decode a BMP. See the fast-bmp npm module.
6
+ * @param data - The data to decode.
7
+ * @returns The decoded image or mask.
8
+ */
9
+ export function decodeBmp(data) {
10
+ const decodedData = decode(data);
11
+ if (decodedData.bitsPerPixel === 1) {
12
+ const mask = new Mask(decodedData.width, decodedData.height, {
13
+ data: decodedData.data,
14
+ });
15
+ return mask.convertColor('GREY');
16
+ }
17
+ else {
18
+ let colorModel;
19
+ switch (decodedData.channels) {
20
+ case 1:
21
+ colorModel = 'GREY';
22
+ break;
23
+ case 3:
24
+ colorModel = 'RGB';
25
+ break;
26
+ default:
27
+ colorModel = 'RGBA';
28
+ break;
29
+ }
30
+ return new Image(decodedData.width, decodedData.height, {
31
+ colorModel,
32
+ data: decodedData.data,
33
+ });
34
+ }
35
+ }
36
+ //# sourceMappingURL=decodeBmp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decodeBmp.js","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,WAAW,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;YAC3D,IAAI,EAAE,WAAW,CAAC,IAAkB;SACrC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,IAAI,UAA2B,CAAC;QAChC,QAAQ,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC;gBACJ,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;YACR,KAAK,CAAC;gBACJ,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;YACR;gBACE,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;QACV,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;YACtD,UAAU;YACV,IAAI,EAAE,WAAW,CAAC,IAAkB;SACrC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"decodePng.d.ts","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CA+BnD"}
1
+ {"version":3,"file":"decodePng.d.ts","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAoCnD"}
@@ -9,10 +9,16 @@ import { assert } from '../utils/validators/assert.js';
9
9
  export function decodePng(buffer) {
10
10
  const png = decode(buffer);
11
11
  let colorModel;
12
- const bitDepth = png.depth === 16 ? 16 : 8;
12
+ const bitDepth = png.depth;
13
13
  if (png.palette) {
14
14
  return loadPalettePng(png);
15
15
  }
16
+ if (bitDepth === 1) {
17
+ return new Image(png.width, png.height, {
18
+ data: decodeBinary(png),
19
+ colorModel: 'GREY',
20
+ });
21
+ }
16
22
  switch (png.channels) {
17
23
  case 1:
18
24
  colorModel = 'GREY';
@@ -43,7 +49,7 @@ export function decodePng(buffer) {
43
49
  function loadPalettePng(png) {
44
50
  assert(png.palette);
45
51
  const pixels = png.width * png.height;
46
- const data = new Uint8Array(pixels * 3);
52
+ const data = new Uint8Array(pixels * png.palette[0].length);
47
53
  const pixelsPerByte = 8 / png.depth;
48
54
  const factor = png.depth < 8 ? pixelsPerByte : 1;
49
55
  const mask = Number.parseInt('1'.repeat(png.depth), 2);
@@ -57,12 +63,30 @@ function loadPalettePng(png) {
57
63
  mask;
58
64
  }
59
65
  const paletteValue = png.palette[value];
60
- data[dataIndex++] = paletteValue[0];
61
- data[dataIndex++] = paletteValue[1];
62
- data[dataIndex++] = paletteValue[2];
66
+ for (const paletteChannel of paletteValue) {
67
+ data[dataIndex++] = paletteChannel;
68
+ }
63
69
  }
64
70
  return new Image(png.width, png.height, {
65
71
  data,
72
+ colorModel: png.palette[0].length === 4 ? 'RGBA' : 'RGB',
66
73
  });
67
74
  }
75
+ function decodeBinary(png) {
76
+ const totalPixels = png.width * png.height;
77
+ const result = new Uint8Array(totalPixels);
78
+ const pngData = png.data;
79
+ const padding = png.width % 8;
80
+ const bytesPerLine = Math.ceil(png.width / 8);
81
+ let pixelIndex = 0;
82
+ for (let byteIndex = 0; byteIndex < pngData.length && pixelIndex < totalPixels; byteIndex++) {
83
+ const byte = pngData[byteIndex];
84
+ const limit = byteIndex % bytesPerLine === 0 ? 8 - padding : 0;
85
+ for (let bitIndex = 7; bitIndex >= limit && pixelIndex < totalPixels; bitIndex--) {
86
+ const bit = (byte >> bitIndex) & 1;
87
+ result[pixelIndex++] = bit * 255;
88
+ }
89
+ }
90
+ return result;
91
+ }
68
92
  //# sourceMappingURL=decodePng.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decodePng.js","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAkB;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,UAA2B,CAAC;IAChC,MAAM,QAAQ,GAAa,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC;YACJ,UAAU,GAAG,MAAM,CAAC;YACpB,MAAM;QACR,KAAK,CAAC;YACJ,UAAU,GAAG,OAAO,CAAC;YACrB,MAAM;QACR,KAAK,CAAC;YACJ,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM;QACR,KAAK,CAAC;YACJ,UAAU,GAAG,MAAM,CAAC;YACpB,MAAM;QACR;YACE,MAAM,IAAI,UAAU,CAAC,+BAA+B,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QACtC,UAAU;QACV,QAAQ;QACR,IAAI,EAAE,GAAG,CAAC,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAe;IACrC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK;gBACH,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBACnE,IAAI,CAAC;QACT,CAAC;QACD,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QACtC,IAAI;KACL,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"decodePng.js","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decodeTiff.d.ts","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAIpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAqCnD"}
1
+ {"version":3,"file":"decodeTiff.d.ts","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAGpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAqEnD"}
@@ -7,9 +7,8 @@ import { getMetadata } from './getMetadata.js';
7
7
  * @returns The decoded image.
8
8
  */
9
9
  export function decodeTiff(buffer) {
10
- const result = decode(buffer);
10
+ const result = decode(buffer, { pages: [0] });
11
11
  return getImageFromIFD(result[0]);
12
- // TODO: optimize not to decode whole file
13
12
  }
14
13
  /**
15
14
  * Create image from a single IFD.
@@ -17,39 +16,63 @@ export function decodeTiff(buffer) {
17
16
  * @returns The decoded image.
18
17
  */
19
18
  export function getImageFromIFD(ifd) {
19
+ if (ifd.data instanceof Float32Array || ifd.data instanceof Float64Array) {
20
+ throw new Error('Float TIFF data is not supported.');
21
+ }
20
22
  if (ifd.type === 3) {
21
- // Palette
22
- const data = new Uint16Array(3 * ifd.width * ifd.height);
23
+ const hasAlpha = ifd.samplesPerPixel === 2;
24
+ const pixelLength = hasAlpha ? 4 : 3;
25
+ const data = new Uint16Array(pixelLength * ifd.width * ifd.height);
23
26
  const palette = ifd.palette;
24
27
  let ptr = 0;
25
- for (const index of ifd.data) {
26
- const color = palette[index];
27
- data[ptr++] = color[0];
28
- data[ptr++] = color[1];
29
- data[ptr++] = color[2];
28
+ if (hasAlpha) {
29
+ for (let index = 0; index < ifd.data.length; index += ifd.samplesPerPixel) {
30
+ const color = palette[ifd.data[index]];
31
+ data[ptr++] = color[0];
32
+ data[ptr++] = color[1];
33
+ data[ptr++] = color[2];
34
+ // To ensure that the value is 16 bits.
35
+ data[ptr++] = Math.round((ifd.data[index + 1] / 2 ** ifd.bitsPerSample) * 65535);
36
+ }
37
+ }
38
+ else {
39
+ for (let index = 0; index < ifd.data.length; index += ifd.samplesPerPixel) {
40
+ const color = palette[ifd.data[index]];
41
+ data[ptr++] = color[0];
42
+ data[ptr++] = color[1];
43
+ data[ptr++] = color[2];
44
+ }
30
45
  }
31
46
  return new Image(ifd.width, ifd.height, {
32
47
  data,
33
- // TODO: handle alpha properly
34
- colorModel: ifd.alpha ? 'RGBA' : 'RGB',
35
- // TODO: handle other bit depths
48
+ colorModel: hasAlpha ? 'RGBA' : 'RGB',
36
49
  bitDepth: 16,
37
50
  meta: getMetadata(ifd),
38
51
  });
39
52
  }
53
+ else if (ifd.type === 1 || ifd.type === 0) {
54
+ if (ifd.bitsPerSample !== 1) {
55
+ return new Image(ifd.width, ifd.height, {
56
+ data: ifd.data,
57
+ bitDepth: ifd.bitsPerSample,
58
+ colorModel: ifd.alpha ? 'GREYA' : 'GREY',
59
+ meta: getMetadata(ifd),
60
+ });
61
+ }
62
+ else {
63
+ return new Image(ifd.width, ifd.height, {
64
+ data: ifd.data.map((pixel) => pixel * 255),
65
+ bitDepth: 8,
66
+ colorModel: 'GREY',
67
+ meta: getMetadata(ifd),
68
+ });
69
+ }
70
+ }
40
71
  else {
41
72
  return new Image(ifd.width, ifd.height, {
42
- // TODO: handle float data
43
- // @ts-expect-error float data not handled yet
44
73
  data: ifd.data,
45
74
  bitDepth: ifd.bitsPerSample,
46
- colorModel: ifd.type === 2
47
- ? ifd.alpha
48
- ? 'RGBA'
49
- : 'RGB'
50
- : ifd.alpha
51
- ? 'GREYA'
52
- : 'GREY',
75
+ colorModel: ifd.alpha ? 'RGBA' : 'RGB',
53
76
  meta: getMetadata(ifd),
54
77
  });
55
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decodeTiff.js","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,0CAA0C;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,UAAU;QACV,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,CAAC,OAA0C,CAAC;QAC/D,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;YACtC,IAAI;YACJ,8BAA8B;YAC9B,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YACtC,gCAAgC;YAChC,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;YACtC,0BAA0B;YAC1B,8CAA8C;YAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,aAAyB;YACvC,UAAU,EACR,GAAG,CAAC,IAAI,KAAK,CAAC;gBACZ,CAAC,CAAC,GAAG,CAAC,KAAK;oBACT,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,KAAK;gBACT,CAAC,CAAC,GAAG,CAAC,KAAK;oBACT,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,MAAM;YACd,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"decodeTiff.js","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getMbrAngle.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,CASzD"}
1
+ {"version":3,"file":"getMbrAngle.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,CAUzD"}
@@ -8,7 +8,8 @@ const topFirst = (mbrPoint1, mbrPoint2) => mbrPoint1.row >= mbrPoint2.row ? -1 :
8
8
  * @returns The angle in degrees.
9
9
  */
10
10
  export function getMbrAngle(mbr) {
11
- const sorted = mbr.slice().sort(leftFirst);
11
+ const sorted = mbr.slice();
12
+ sorted.sort(leftFirst);
12
13
  const left = sorted.slice(0, 2);
13
14
  const right = sorted.slice(2, 4);
14
15
  left.sort(topFirst);
@@ -1 +1 @@
1
- {"version":3,"file":"getMbrAngle.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,SAAS,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACvD,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACtD,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"getMbrAngle.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,SAAS,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACvD,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACtD,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"monotoneChainConvexHull.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,UAAU,WAAW;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,WAAgB,GACxB,KAAK,EAAE,CA4BT"}
1
+ {"version":3,"file":"monotoneChainConvexHull.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,UAAU,WAAW;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,WAAgB,GACxB,KAAK,EAAE,CA6BT"}
@@ -8,7 +8,8 @@
8
8
  export function monotoneChainConvexHull(points, options = {}) {
9
9
  const { sorted = false } = options;
10
10
  if (!sorted) {
11
- points = points.slice().sort(byXThenY);
11
+ points = points.slice();
12
+ points.sort(byXThenY);
12
13
  }
13
14
  const n = points.length;
14
15
  const result = new Array(n * 2);
@@ -1 +1 @@
1
- {"version":3,"file":"monotoneChainConvexHull.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,EAAE,CAAC,EAAS,EAAE,EAAS,EAAE,EAAS;IACzC,OAAO,CACL,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC3C,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAAa,EAAE,MAAa;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvC,CAAC;AAED,wBAAwB"}
1
+ {"version":3,"file":"monotoneChainConvexHull.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,EAAE,CAAC,EAAS,EAAE,EAAS,EAAE,EAAS;IACzC,OAAO,CACL,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC3C,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAAa,EAAE,MAAa;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvC,CAAC;AAED,wBAAwB"}
@@ -1,9 +1,9 @@
1
- import type { Image } from '../Image.js';
2
- import { Mask } from '../Mask.js';
1
+ import { Image } from '../Image.js';
2
+ import type { Mask } from '../Mask.js';
3
3
  /**
4
4
  * Creates a BMP buffer from a mask.
5
- * @param mask - The mask instance.
5
+ * @param image - The mask instance.
6
6
  * @returns The buffer.
7
7
  */
8
- export declare function encodeBmp(mask: Image | Mask): Uint8Array<ArrayBufferLike>;
8
+ export declare function encodeBmp(image: Image | Mask): Uint8Array<ArrayBufferLike>;
9
9
  //# sourceMappingURL=encodeBmp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encodeBmp.d.ts","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,+BAa3C"}
1
+ {"version":3,"file":"encodeBmp.d.ts","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,+BAoB5C"}
@@ -1,22 +1,30 @@
1
1
  import * as bmp from 'fast-bmp';
2
- import { Mask } from '../Mask.js';
2
+ import { Image } from '../Image.js';
3
3
  /**
4
4
  * Creates a BMP buffer from a mask.
5
- * @param mask - The mask instance.
5
+ * @param image - The mask instance.
6
6
  * @returns The buffer.
7
7
  */
8
- export function encodeBmp(mask) {
9
- if (!(mask instanceof Mask)) {
10
- throw new TypeError('Image bmp encoding is not implemented.');
8
+ export function encodeBmp(image) {
9
+ if (image instanceof Image) {
10
+ return bmp.encode({
11
+ width: image.width,
12
+ height: image.height,
13
+ components: image.components,
14
+ bitsPerPixel: image.channels * image.bitDepth,
15
+ channels: image.channels,
16
+ data: image.getRawImage().data,
17
+ });
18
+ }
19
+ else {
20
+ return bmp.encode({
21
+ width: image.width,
22
+ height: image.height,
23
+ components: 1,
24
+ bitsPerPixel: 1,
25
+ channels: 1,
26
+ data: image.getRawImage().data,
27
+ });
11
28
  }
12
- const imageData = mask.getRawImage();
13
- return bmp.encode({
14
- width: imageData.width,
15
- height: imageData.height,
16
- components: 1,
17
- bitsPerPixel: 1,
18
- channels: 1,
19
- data: imageData.data,
20
- });
21
29
  }
22
30
  //# sourceMappingURL=encodeBmp.js.map