Изображение рисуется шейдером Skia в два цвета матрицей Байера — как на старых экранах и в печати. Размер точки, тёмный и светлый цвета задаются пропсами.
Под пальцем (в вебе — под курсором) растр мельчает и проявляет исходные цвета фотографии, а за пределами пятна снова остаётся двухцветным. Пятно плавно следует за касанием и гаснет после отпускания; пока его нет, кадры не пересчитываются. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedpnpm add @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedyarn add @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedbun add @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedСкопируйте эти файлы в src/shared/components/organisms/dither-renderer/:
Код доступен по подпискеPro
Исходник «Дизеринг фото» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Дизеринг фото» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
srcТип DitherRendererImage
pixelSize?Тип number
darkColor?Тип string
lightColor?Тип string
pointerRadius?Тип number
focusScale?Тип number
revealColor?Тип boolean
alt?Тип string
style?Тип StyleProp<ViewStyle>