import * as React from 'react'; import { Image, ScrollView, StatusBar, View, ImageSourcePropType } from 'react-native'; import Canvas, { Image as CanvasImage, Path2D, ImageData } from 'react-native-canvas'; const Example = ({ sample, children }: { sample: ImageSourcePropType; children: React.ReactNode }) => ( {children} ); class CanvasTest extends React.Component { handleImageData(canvas: Canvas) { canvas.width = 100; canvas.height = 100; const context = canvas.getContext('2d'); context.fillStyle = 'purple'; context.fillRect(0, 0, 100, 100); context.getImageData(0, 0, 100, 100).then(imageData => { const data = Object.values(imageData.data); const length = Object.keys(data).length; for (let i = 0; i < length; i += 4) { data[i] = 0; data[i + 1] = 0; data[i + 2] = 0; } const imgData = new ImageData(canvas, data, 100, 100); context.putImageData(imgData, 0, 0); }); } handlePurpleRect(canvas: Canvas) { canvas.width = 100; canvas.height = 100; const context = canvas.getContext('2d'); context.fillStyle = 'purple'; context.fillRect(0, 0, 100, 100); const { width } = context.measureText('yo'); } handleRedCircle(canvas: Canvas) { canvas.width = 100; canvas.height = 100; const context = canvas.getContext('2d'); context.fillStyle = 'red'; context.arc(50, 50, 49, 0, Math.PI * 2, true); context.fill(); } handleImageRect(canvas: Canvas) { const image = new CanvasImage(canvas); canvas.width = 100; canvas.height = 100; const context = canvas.getContext('2d'); image.src = 'https://upload.wikimedia.org/wikipedia/commons/6/63/Biho_Takashi._Bat_Before_the_Moon%2C_ca._1910.jpg'; image.addEventListener('load', () => { context.drawImage(image, 0, 0, 100, 100); }); } handlePath(canvas: Canvas) { canvas.width = 100; canvas.height = 100; const context = canvas.getContext('2d'); context.fillStyle = 'red'; context.fillRect(0, 0, 100, 100); const ellipse = new Path2D(canvas); ellipse.ellipse(50, 50, 25, 35, (45 * Math.PI) / 180, 0, 2 * Math.PI); context.fillStyle = 'purple'; context.fill(ellipse); context.save(); context.scale(0.5, 0.5); context.translate(50, 20); const rectPath = new Path2D(canvas, 'M10 10 h 80 v 80 h -80 Z'); context.fillStyle = 'pink'; context.fill(rectPath); context.restore(); } handleGradient(canvas: Canvas) { canvas.width = 100; canvas.height = 100; const ctx = canvas.getContext('2d'); const gradient = ctx.createLinearGradient(0, 0, 200, 0); gradient.addColorStop(0, 'green'); gradient.addColorStop(1, 'white'); ctx.fillStyle = gradient; ctx.fillRect(0, 0, 100, 100); } handleEmbedHTML(canvas: Canvas) { const image = new CanvasImage(canvas); canvas.width = 100; canvas.height = 100; const context = canvas.getContext('2d'); const htmlString = 'Hello, World!'; const svgString = `
${htmlString}
`; image.src = `data:image/svg+xml,${encodeURIComponent(svgString)}`; image.addEventListener('load', () => { context.drawImage(image, 0, 0, 100, 100); }); } render() { return ( ); } }