pixel-data-js 0.32.0 → 0.33.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.prod.cjs +51 -27
- package/dist/index.prod.cjs.map +1 -1
- package/dist/index.prod.d.ts +13 -4
- package/dist/index.prod.js +50 -27
- package/dist/index.prod.js.map +1 -1
- package/package.json +1 -1
- package/src/ImageData/copyImageData.ts +4 -2
- package/src/ImageData/extractImageData.ts +1 -2
- package/src/ImageData/extractImageDataBuffer.ts +2 -4
- package/src/ImageData/writeImageData.ts +4 -5
- package/src/ImageData/writeImageDataBuffer.ts +2 -4
- package/src/PixelData/extractPixelDataBuffer.ts +2 -4
- package/src/PixelData/fillPixelData.ts +1 -2
- package/src/PixelData/fillPixelDataFast.ts +1 -2
- package/src/PixelData/writePixelData.ts +55 -0
- package/src/index.ts +1 -0
package/package.json
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ImageDataLike } from './_ImageData-types'
|
|
2
2
|
|
|
3
|
-
export function copyImageData(
|
|
4
|
-
|
|
3
|
+
export function copyImageData(source: ImageDataLike): ImageData {
|
|
4
|
+
const dataCopy = new Uint8ClampedArray(source.data)
|
|
5
|
+
|
|
6
|
+
return new ImageData(dataCopy, source.width, source.height)
|
|
5
7
|
}
|
|
6
8
|
|
|
7
9
|
export function copyImageDataLike({ data, width, height }: ImageDataLike): ImageDataLike {
|
|
@@ -40,8 +40,7 @@ export function extractImageDataBuffer(
|
|
|
40
40
|
const { x, y, w, h } = typeof _x === 'object'
|
|
41
41
|
? _x
|
|
42
42
|
: { x: _x, y: _y!, w: _w!, h: _h! }
|
|
43
|
-
if (w <= 0) return new Uint8ClampedArray(0)
|
|
44
|
-
if (h <= 0) return new Uint8ClampedArray(0)
|
|
43
|
+
if (w <= 0 || h <= 0) return new Uint8ClampedArray(0)
|
|
45
44
|
|
|
46
45
|
const srcW = imageData.width
|
|
47
46
|
const srcH = imageData.height
|
|
@@ -72,8 +71,7 @@ export function extractImageDataBuffer(
|
|
|
72
71
|
copyW = Math.min(copyW, srcW - srcX)
|
|
73
72
|
copyH = Math.min(copyH, srcH - srcY)
|
|
74
73
|
|
|
75
|
-
if (copyW <= 0) return out
|
|
76
|
-
if (copyH <= 0) return out
|
|
74
|
+
if (copyW <= 0 || copyH <= 0) return out
|
|
77
75
|
|
|
78
76
|
// 2. Perform high-speed block copy
|
|
79
77
|
// Attempt to use a 32-bit view if the buffer is memory-aligned.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Writes image data from a source to a target
|
|
2
|
+
* Writes image data from a source to a target.
|
|
3
3
|
*
|
|
4
4
|
* @param target - The destination ImageData to write to.
|
|
5
5
|
* @param source - The source ImageData to read from.
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
export function writeImageData(
|
|
10
10
|
target: ImageData,
|
|
11
11
|
source: ImageData,
|
|
12
|
-
x
|
|
13
|
-
y
|
|
12
|
+
x = 0,
|
|
13
|
+
y = 0,
|
|
14
14
|
): void {
|
|
15
15
|
const dstW = target.width
|
|
16
16
|
const dstH = target.height
|
|
@@ -42,8 +42,7 @@ export function writeImageData(
|
|
|
42
42
|
copyW = Math.min(copyW, dstW - dstX)
|
|
43
43
|
copyH = Math.min(copyH, dstH - dstY)
|
|
44
44
|
|
|
45
|
-
if (copyW <= 0) return
|
|
46
|
-
if (copyH <= 0) return
|
|
45
|
+
if (copyW <= 0 || copyH <= 0) return
|
|
47
46
|
|
|
48
47
|
const isDstAligned = dst.byteOffset % 4 === 0
|
|
49
48
|
const isSrcAligned = src.byteOffset % 4 === 0
|
|
@@ -57,8 +57,7 @@ export function writeImageDataBuffer(
|
|
|
57
57
|
h = _h!
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
if (w <= 0) return
|
|
61
|
-
if (h <= 0) return
|
|
60
|
+
if (w <= 0 || h <= 0) return
|
|
62
61
|
|
|
63
62
|
const dstW = target.width
|
|
64
63
|
const dstH = target.height
|
|
@@ -87,8 +86,7 @@ export function writeImageDataBuffer(
|
|
|
87
86
|
copyW = Math.min(copyW, dstW - dstX)
|
|
88
87
|
copyH = Math.min(copyH, dstH - dstY)
|
|
89
88
|
|
|
90
|
-
if (copyW <= 0) return
|
|
91
|
-
if (copyH <= 0) return
|
|
89
|
+
if (copyW <= 0 || copyH <= 0) return
|
|
92
90
|
|
|
93
91
|
// Fast-path: Both arrays must be 4-byte aligned to use Uint32Array safely
|
|
94
92
|
const isDstAligned = dst.byteOffset % 4 === 0
|
|
@@ -44,8 +44,7 @@ export function extractPixelDataBuffer(
|
|
|
44
44
|
const srcH = source.h
|
|
45
45
|
const srcData = source.data
|
|
46
46
|
|
|
47
|
-
if (w <= 0) return new Uint32Array(0)
|
|
48
|
-
if (h <= 0) return new Uint32Array(0)
|
|
47
|
+
if (w <= 0 || h <= 0) return new Uint32Array(0)
|
|
49
48
|
|
|
50
49
|
const dstData = new Uint32Array(w * h)
|
|
51
50
|
|
|
@@ -72,8 +71,7 @@ export function extractPixelDataBuffer(
|
|
|
72
71
|
copyW = Math.min(copyW, srcW - srcX)
|
|
73
72
|
copyH = Math.min(copyH, srcH - srcY)
|
|
74
73
|
|
|
75
|
-
if (copyW <= 0) return dstData
|
|
76
|
-
if (copyH <= 0) return dstData
|
|
74
|
+
if (copyW <= 0 || copyH <= 0) return dstData
|
|
77
75
|
|
|
78
76
|
for (let row = 0; row < copyH; row++) {
|
|
79
77
|
const srcStart = (srcY + row) * srcW + srcX
|
|
@@ -83,8 +83,7 @@ export function fillPixelData(
|
|
|
83
83
|
fillW = Math.min(fillW, dstW - dstX)
|
|
84
84
|
fillH = Math.min(fillH, dstH - dstY)
|
|
85
85
|
|
|
86
|
-
if (fillW <= 0) return false
|
|
87
|
-
if (fillH <= 0) return false
|
|
86
|
+
if (fillW <= 0 || fillH <= 0) return false
|
|
88
87
|
|
|
89
88
|
const dst32 = dst.data
|
|
90
89
|
let hasChanged = false
|
|
@@ -85,8 +85,7 @@ export function fillPixelDataFast(
|
|
|
85
85
|
fillW = Math.min(fillW, dstW - dstX)
|
|
86
86
|
fillH = Math.min(fillH, dstH - dstY)
|
|
87
87
|
|
|
88
|
-
if (fillW <= 0) return
|
|
89
|
-
if (fillH <= 0) return
|
|
88
|
+
if (fillW <= 0 || fillH <= 0) return
|
|
90
89
|
|
|
91
90
|
const dst32 = dst.data
|
|
92
91
|
const dw = dst.w
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { PixelData32 } from './_pixelData-types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Writes PixelData from a source to a target.
|
|
5
|
+
* @param target - The destination to write to.
|
|
6
|
+
* @param source - The source to read from.
|
|
7
|
+
* @param x - The x-coordinate in the target where drawing starts.
|
|
8
|
+
* @param y - The y-coordinate in the target where drawing starts.
|
|
9
|
+
*/
|
|
10
|
+
export function writePixelData(
|
|
11
|
+
target: PixelData32,
|
|
12
|
+
source: PixelData32,
|
|
13
|
+
x = 0,
|
|
14
|
+
y = 0,
|
|
15
|
+
): void {
|
|
16
|
+
const dstW = target.w
|
|
17
|
+
const dstH = target.h
|
|
18
|
+
const dst = target.data
|
|
19
|
+
|
|
20
|
+
const srcW = source.w
|
|
21
|
+
const srcH = source.h
|
|
22
|
+
const src = source.data
|
|
23
|
+
|
|
24
|
+
let dstX = x
|
|
25
|
+
let dstY = y
|
|
26
|
+
let srcX = 0
|
|
27
|
+
let srcY = 0
|
|
28
|
+
let copyW = srcW
|
|
29
|
+
let copyH = srcH
|
|
30
|
+
|
|
31
|
+
if (dstX < 0) {
|
|
32
|
+
srcX = -dstX
|
|
33
|
+
copyW += dstX
|
|
34
|
+
dstX = 0
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (dstY < 0) {
|
|
38
|
+
srcY = -dstY
|
|
39
|
+
copyH += dstY
|
|
40
|
+
dstY = 0
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
copyW = Math.min(copyW, dstW - dstX)
|
|
44
|
+
copyH = Math.min(copyH, dstH - dstY)
|
|
45
|
+
|
|
46
|
+
if (copyW <= 0 || copyH <= 0) return
|
|
47
|
+
|
|
48
|
+
for (let row = 0; row < copyH; row++) {
|
|
49
|
+
const dstStart = (dstY + row) * dstW + dstX
|
|
50
|
+
const srcStart = (srcY + row) * srcW + srcX
|
|
51
|
+
const chunk = src.subarray(srcStart, srcStart + copyW)
|
|
52
|
+
|
|
53
|
+
dst.set(chunk, dstStart)
|
|
54
|
+
}
|
|
55
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -166,6 +166,7 @@ export * from './PixelData/ReusablePixelData'
|
|
|
166
166
|
export * from './PixelData/rotatePixelData'
|
|
167
167
|
export * from './PixelData/uInt32ArrayToPixelData'
|
|
168
168
|
export * from './PixelData/writePaintBufferToPixelData'
|
|
169
|
+
export * from './PixelData/writePixelData'
|
|
169
170
|
export * from './PixelData/writePixelDataBuffer'
|
|
170
171
|
|
|
171
172
|
export * from './Rect/_rect-types'
|