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 };
},
};