January 27, 2025
카메라 화면에서 발박스가 가장자리에 붙을 경우 에러 메시지를 띄워야 했다. 발박스가 카메라 화면의 가장자리에 위치해있다는 것을 구분해야했다.
아래 이미지는 실제로 구현에 성공한 과정에서 찍은 스크린샷이다.
FootCenterBoxWrapper
라는 가상의 canvas를 만든다. 이 화면은 카메라 화면의 width, height와 동일하다.<FootCenterBoxWrapper
ref={centerCanvasRef}
width = {webcamRef?.current?.video.offsetWidth}
height={ webcamRef?.current?.video.offsetHeight }
/>
const centerCanvasRef = useRef<HTMLCanvasElement>(null);
const ctxCenter = centerCanvasRef.current?.getContext('2d');
/*
*시작점 X 좌표 = 캔버스 너비 / 2 - 직사각형 너비 / 2
*시작점 Y 좌표 = 캔버스 높이 / 2 - 직사각형 높이 / 2
*/
const centerX = ctxCenter?.canvas.width! / 2 - ((ctxCenter?.canvas.width! / 2) * 1.5) / 2;
const centerY = ctxCenter?.canvas.height! / 2 - ((ctxCenter?.canvas.height! / 2) * 1.5) / 2;
const centerBoxWidth = (ctxCenter?.canvas.width! / 2) * 1.5;
const centerBoxHeight = (ctxCenter?.canvas.height! / 2) * 1.5;
// footBoxCanvas박스와 가운데 박스의 거리를 계산
const calcTop = ctx?.canvas.height! / 2 - centerBoxHeight / 2;
const calcLeft = ctx?.canvas.width! / 2 - centerBoxWidth / 2;
const calcBottom = ctx?.canvas.height! / 2 - centerBoxHeight / 2 + centerBoxHeight;
const calcRight = ctx?.canvas.width! / 2 - centerBoxWidth / 2 + centerBoxWidth;
const boxAtEdge = boxX < calcLeft || boxX + boxWidth > calcRight || boxY < calcTop || boxY + boxHeight > calcBottom;
이쪽 부분이 그때 당시에 구현 방법을 생각하지 못하여 난항을 겪었던 것으로 생각한다. 노트에 이걸 어떻게 구현하면 좋을지 그림도 그리고 글을 써가며 해결책을 찾아갔었다. 개발하며 해결책을 찾아가는 과정에서 참 창의성이 중요하다는 생각이 들었다. A가 안되면 B방법을 시도해보고 안되면 C방법도 시도해보고,, 이런 과정을 겪으며 해결책을 찾아냈을 때 큰 뿌듯함이 있다. 위 업무도 그 뿌듯함을 줬었던 부분이었다.