@@ -10,6 +10,7 @@ import {
10
10
type Rect ,
11
11
} from 'react-native-fast-opencv' ;
12
12
import { launchImageLibrary , type Asset } from 'react-native-image-picker' ;
13
+ import { useRunOnJS , useWorklet , Worklets } from 'react-native-worklets-core' ;
13
14
14
15
export function ImageExample ( ) {
15
16
const [ photo , setPhoto ] = useState < Asset | null > ( null ) ;
@@ -28,12 +29,17 @@ export function ImageExample() {
28
29
const src = OpenCV . base64ToMat ( photo . base64 ) ;
29
30
const dst = OpenCV . createObject ( ObjectType . Mat , 0 , 0 , DataTypes . CV_8U ) ;
30
31
31
- OpenCV . invoke ( 'cvtColor' , src , dst , ColorConversionCodes . COLOR_BGR2HSV ) ;
32
+ await OpenCV . invokeAsync (
33
+ 'cvtColor' ,
34
+ src ,
35
+ dst ,
36
+ ColorConversionCodes . COLOR_BGR2HSV
37
+ ) ;
32
38
33
39
const lowerBound = OpenCV . createObject ( ObjectType . Scalar , 40 , 40 , 40 ) ;
34
40
const upperBound = OpenCV . createObject ( ObjectType . Scalar , 100 , 255 , 255 ) ;
35
41
36
- OpenCV . invoke ( 'inRange' , dst , lowerBound , upperBound , dst ) ;
42
+ await OpenCV . invokeAsync ( 'inRange' , dst , lowerBound , upperBound , dst ) ;
37
43
38
44
// const channels = OpenCV.createObject(ObjectType.MatVector);
39
45
// OpenCV.invoke('split', dst, channels);
@@ -65,20 +71,51 @@ export function ImageExample() {
65
71
66
72
// console.log(rectangles);
67
73
68
-
69
- const result = OpenCV . toJSValue ( dst ) ;
70
- setB64 ( result . base64 ) ;
74
+ // const result = OpenCV.toJSValue(dst);
75
+ // setB64(result.base64);
71
76
// console.log(array.length);
72
77
}
73
78
} ;
74
79
80
+ const test2 = useRunOnJS ( ( data : string ) => {
81
+ setB64 ( data ) ;
82
+ } , [ ] ) ;
83
+
84
+ const worklet = useWorklet (
85
+ 'default' ,
86
+ ( ) => {
87
+ 'worklet' ;
88
+ if ( photo && photo . base64 && photo . width && photo . height ) {
89
+ const src = OpenCV . base64ToMat ( photo . base64 ) ;
90
+ const dst = OpenCV . createObject ( ObjectType . Mat , 0 , 0 , DataTypes . CV_8U ) ;
91
+
92
+ OpenCV . invoke ( 'cvtColor' , src , dst , ColorConversionCodes . COLOR_BGR2HSV ) ;
93
+
94
+ const lowerBound = OpenCV . createObject ( ObjectType . Scalar , 40 , 40 , 40 ) ;
95
+ const upperBound = OpenCV . createObject (
96
+ ObjectType . Scalar ,
97
+ 100 ,
98
+ 255 ,
99
+ 255
100
+ ) ;
101
+
102
+ OpenCV . invoke ( 'inRange' , dst , lowerBound , upperBound , dst ) ;
103
+
104
+ const result = OpenCV . toJSValue ( dst ) ;
105
+
106
+ test2 ( result . base64 ) ;
107
+ }
108
+ } ,
109
+ [ ]
110
+ ) ;
111
+
75
112
return (
76
113
< SafeAreaView style = { { backgroundColor : 'white' , flex : 1 } } >
77
114
< Button title = "Select photo" onPress = { test } />
78
115
< Text >
79
116
URI: { photo ?. uri } { photo ?. height } { photo ?. width }
80
117
</ Text >
81
- < Button title = "Process" onPress = { process } />
118
+ < Button title = "Process" onPress = { ( ) => worklet ( ) } />
82
119
{ photo ?. base64 && photo ?. width && photo ?. height && (
83
120
< Image
84
121
source = { { uri : 'data:image/jpg;base64,' + photo . base64 } }
0 commit comments