import React from 'react'; import { NodeData } from '../components/GraphicsNodeEditor/GraphicsContext'; import { createImageData } from './utils'; import { Slider, Stack, Text } from '../components'; const TintComponent: React.FC<{ data: NodeData; onUpdateData: (d: any) => void; }> = ({ data, onUpdateData }) => { const r = data.data?.r ?? 0; const g = data.data?.g ?? 0; const b = data.data?.b ?? 0; return (
Red ({r}) onUpdateData({ r: v })} color="#ef4444"/> Green ({g}) onUpdateData({ g: v })} color="#10b981"/> Blue ({b}) onUpdateData({ b: v })} color="#3b82f6"/>
); }; export const tintNodeType: Omit = { label: 'Tint', inputs: [{ id: 'image', label: 'Image', type: 'image' }], outputs: [{ id: 'image', label: 'Image', type: 'image', color: '#9333ea' }], component: TintComponent, data: { r: 0, g: 0, b: 0 }, process: (inputs, data) => { const imageData = inputs.image as ImageData; const { r = 0, g = 0, b = 0 } = data || {}; if (!imageData) return { image: null }; const newImageData = createImageData(imageData.width, imageData.height); const d = imageData.data; const newD = newImageData.data; for (let i = 0; i < d.length; i += 4) { newD[i] = Math.max(0, Math.min(255, d[i] + r)); newD[i+1] = Math.max(0, Math.min(255, d[i+1] + g)); newD[i+2] = Math.max(0, Math.min(255, d[i+2] + b)); newD[i+3] = d[i+3]; } return { image: newImageData }; }, };