Форум программистов, компьютерный форум, киберфорум JavaScript: React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 29.02.2020
Сообщений: 5

Как выделять фрагмент изображения мышкой?

16.11.2022, 19:16. Показов 479. Ответов 0

Author24 — интернет-сервис помощи студентам
Здравствуйте! Мне необходимо реализовать функционал: выделение объекта на изображении прямоугольником и получение координат прямоугольника на картинке. Как можно это сделать? Я пробовал сделать это с помощью canvas, с абсолютным позиционированным поверх картинки, но не очень получается. В чем ошибка? Или можно реализовать попроще?

Фрагменты кода ниже:

Компонент Canvas:
JavaScript Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function Canvas() {
 
  const canvasRef = useRef(null);
  const [ctx, setCtx] = useState(null);
  const [right, setRight] = useState(0);
  const [bottom, setBottom] = useState(0);
  const [left, setLeft] = useState(-1);
  const [top, setTop] = useState(-1);
 
  function setMouseEvent(event) {
    console.log('push');
    if (ctx != null) {
      ctx.clearRect(0, 0, 1200, 1000);
    }
    setLeft(event.x);
    setTop(event.y);
    event.target.addEventListener('mousemove', getCoordinates)
  }
 
  function removeMouseEvent(event) {
    console.log('unpush');
    event.target.removeEventListener('mousemove', getCoordinates)
  }
 
  function getCoordinates(event) {
    setRight(event.x);
    setBottom(event.y);
  }
 
  useEffect(() => {
    setCtx(canvasRef.current.getContext('2d'));
    canvasRef.current.addEventListener('mousedown', setMouseEvent)
    canvasRef.current.addEventListener('mouseup', removeMouseEvent)
  }, []);
 
  useEffect(() => {
    console.log(right, bottom);
    console.log(ctx);
    if (ctx != null) {
      ctx.clearRect(0, 0, 1200, 1000)
      ctx.rect(left, top, right - left, bottom - top);
      ctx.stroke();
    }
  }, [right, bottom]);
 
  return (
    <canvas className='canvas' ref={canvasRef} width='1200' height='1000'></canvas>
  );
}
 
export default Canvas;

Компонент App:
JavaScript Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function App() {
 
  const [isPopupOpen, setIsPopupOpen] = useState(false);
 
  function getSelectedData() {
    setIsPopupOpen(true);
  }
 
  function closePopUp() {
    setIsPopupOpen(false);
  }
 
  return (
    <main className='main'>
      <div className='main__container'>
        <img className='main__image' src={image} alt='Изображение с объектом'></img>
        <Canvas></Canvas>
      </div>
      <button className='button' type="button"  onClick={getSelectedData}>Добавить</button>
      <Popup isOpen={isPopupOpen} onClose={closePopUp}></Popup>
    </main>
  );
}
 
export default App;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2022, 19:16
Ответы с готовыми решениями:

Как вырезать фрагмент из изображения?
Добрый день. Мне хотелось бы реализовать в своей программе вот это http://ruseller.com/lessons/les1000/index.html (Вырезаем изображение с...

Как вырезать фрагмент из изображения
Помогите. Как в vb вырезать фрагмент из изображения и сохранить его в отдельный файл

Как размыть небольшой фрагмент изображения
Вопрос к опытным верстальщикам: есть div в нем img далее ещё один div меньший по высоте первого с position:absolute лежит сверху на...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2022, 19:16
Помогаю со студенческими работами здесь

Как можно в сообщении при нажатии на клавишу сделать тот же самый фрагмент, как и при нажатии на кнопку мышкой?
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { SendMessage(Messages, WM_GETTEXT, 80, LPARAM(str));...

Вырезать фрагмент изображения
Здравствуйте! Есть слой с фоном и произвольная фигура. Можно ли как-то вырезать часть фона по контуру этой фигуры?

Выделить фрагмент изображения
Ребята подскажите!! Мне нужно на картинке в PictureBox выделить фрагмент мышкой. Как это сделать?

Перемещение изображения мышкой
Добрый день, нужно реализовать перемещение изображения по метке. Метка(Label) меньше изображения, те на нее помещается только часть...

Перемещение изображения мышкой
Подскажите, возможно ли переместить изображение в место клика левой кнопки мышки? Если не сложно,с кодом, заранее спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер