/
Sturon
/
Diplom
Обзор
Документация
Войти
/
Sturon
/
Diplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/src/main/java/ru/diplom/vision/service/ImageAnnotationService.java
61 строка
3 KB
Sturon
Initial
03 июн 2026, 15:01
03 июн 2026, 15:01
17b44a2
Код
Авторство
О чём код?
package ru.diplom.vision.service; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.util.List; import org.springframework.stereotype.Service; import ru.diplom.vision.domain.RegionOfInterest; import ru.diplom.vision.service.MockDetectorService.DefectCandidate; @Service public class ImageAnnotationService { public BufferedImage buildAnnotatedImage( BufferedImage source, List<RegionOfInterest> rois, List<DefectCandidate> defects ) { BufferedImage canvas = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D graphics = canvas.createGraphics(); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics.drawImage(source, 0, 0, null); for (RegionOfInterest roi : rois) { graphics.setColor(new Color(14, 165, 163, 200)); graphics.setStroke(new BasicStroke(4f)); graphics.drawRect(roi.getX(), roi.getY(), roi.getWidth(), roi.getHeight()); graphics.setFont(new Font("SansSerif", Font.BOLD, 18)); graphics.drawString(roi.getName(), roi.getX() + 8, Math.max(22, roi.getY() - 8)); } graphics.setFont(new Font("SansSerif", Font.BOLD, 18)); for (int index = 0; index < defects.size(); index++) { DefectCandidate defect = defects.get(index); graphics.setColor(new Color(239, 68, 68, 220)); graphics.setStroke(new BasicStroke(4f)); graphics.drawRoundRect(defect.x(), defect.y(), defect.width(), defect.height(), 12, 12); graphics.fillRoundRect(defect.x(), Math.max(0, defect.y() - 28), 280, 24, 10, 10); graphics.setColor(Color.WHITE); graphics.drawString( "#" + (index + 1) + " " + defect.roiName() + ": " + defect.defectType(), defect.x() + 8, Math.max(18, defect.y() - 10) ); } graphics.dispose(); return canvas; } public BufferedImage crop(BufferedImage source, DefectCandidate defect) { int x = Math.max(0, defect.x()); int y = Math.max(0, defect.y()); int width = Math.min(defect.width(), source.getWidth() - x); int height = Math.min(defect.height(), source.getHeight() - y); return source.getSubimage(x, y, Math.max(1, width), Math.max(1, height)); } }