import React from 'react';
import { NodeData } from '../components/GraphicsNodeEditor/GraphicsContext';
import { createImageData } from './utils';
import { Slider, Text } from '../components';
const ThresholdComponent: React.FC<{ data: NodeData; onUpdateData: (d: any) => void; }> = ({ data, onUpdateData }) => {
const threshold = data.data?.threshold ?? 128;
return (
Threshold ({threshold})
onUpdateData({ threshold: v })} />
);
};
export const thresholdNodeType: Omit = {
label: 'Threshold',
inputs: [{ id: 'image', label: 'Image', type: 'image' }],
outputs: [{ id: 'image', label: 'Image', type: 'image', color: '#9333ea' }],
component: ThresholdComponent,
data: { threshold: 128 },
process: (inputs, data) => {
const imageData = inputs.image as ImageData;
const { threshold = 128 } = 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) {
const avg = (d[i] + d[i + 1] + d[i + 2]) / 3;
const value = avg > threshold ? 255 : 0;
newD[i] = value;
newD[i + 1] = value;
newD[i + 2] = value;
newD[i + 3] = d[i + 3];
}
return { image: newImageData };
},
};