| export const get_coordinates_of_clicked_image = ( |
| evt: MouseEvent |
| ): [number, number] | null => { |
| let image; |
| if (evt.currentTarget instanceof Element) { |
| image = evt.currentTarget.querySelector("img") as HTMLImageElement; |
| } else { |
| return [NaN, NaN]; |
| } |
|
|
| const imageRect = image.getBoundingClientRect(); |
| const xScale = image.naturalWidth / imageRect.width; |
| const yScale = image.naturalHeight / imageRect.height; |
| if (xScale > yScale) { |
| const displayed_height = image.naturalHeight / xScale; |
| const y_offset = (imageRect.height - displayed_height) / 2; |
| var x = Math.round((evt.clientX - imageRect.left) * xScale); |
| var y = Math.round((evt.clientY - imageRect.top - y_offset) * xScale); |
| } else { |
| const displayed_width = image.naturalWidth / yScale; |
| const x_offset = (imageRect.width - displayed_width) / 2; |
| var x = Math.round((evt.clientX - imageRect.left - x_offset) * yScale); |
| var y = Math.round((evt.clientY - imageRect.top) * yScale); |
| } |
| if (x < 0 || x >= image.naturalWidth || y < 0 || y >= image.naturalHeight) { |
| return null; |
| } |
| return [x, y]; |
| }; |
|
|