Skip to content
Snippets Groups Projects
Commit 4eb34529 authored by Matej Kovár's avatar Matej Kovár
Browse files

fixed image preview

parent f70ed1cc
No related branches found
No related tags found
No related merge requests found
...@@ -218,7 +218,7 @@ public class Project { ...@@ -218,7 +218,7 @@ public class Project {
Path path = this.getCfg().getPathToFaceByName(name); Path path = this.getCfg().getPathToFaceByName(name);
File file = path.toFile(); File file = path.toFile();
face = new HumanFace(file, true); // loads also landmarks, if exist face = new HumanFace(file, true); // loads also landmarks, if exist
Path preview = path.resolveSibling(name.concat("_preview.jpg")); Path preview = path.resolveSibling(name.concat(".jpg"));
face.setPreview(preview); face.setPreview(preview);
this.addFace(face); this.addFace(face);
out.printDuration("Loaded model " + face.getShortName() +" with " + face.getMeshModel().getNumVertices() + " vertices"); out.printDuration("Loaded model " + face.getShortName() +" with " + face.getMeshModel().getNumVertices() + " vertices");
......
...@@ -159,6 +159,11 @@ ...@@ -159,6 +159,11 @@
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>30.1-jre</version> <version>30.1-jre</version>
</dependency> </dependency>
<dependency>
<groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId>
<version>4.2</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
......
...@@ -3,16 +3,16 @@ package cz.fidentis.analyst.project; ...@@ -3,16 +3,16 @@ package cz.fidentis.analyst.project;
import cz.fidentis.analyst.core.ControlPanel; import cz.fidentis.analyst.core.ControlPanel;
import cz.fidentis.analyst.face.HumanFace; import cz.fidentis.analyst.face.HumanFace;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import org.imgscalr.Scalr;
/** /**
* *
...@@ -22,8 +22,7 @@ public class FaceStatePanel extends ControlPanel { ...@@ -22,8 +22,7 @@ public class FaceStatePanel extends ControlPanel {
private final ImageIcon notCheck = new ImageIcon(FaceStatePanel.class.getClassLoader().getResource("/" + "notCheck16x16.png")); private final ImageIcon notCheck = new ImageIcon(FaceStatePanel.class.getClassLoader().getResource("/" + "notCheck16x16.png"));
private final ImageIcon check = new ImageIcon(FaceStatePanel.class.getClassLoader().getResource("/" + "check16x16.png")); private final ImageIcon check = new ImageIcon(FaceStatePanel.class.getClassLoader().getResource("/" + "check16x16.png"));
//private final ImageIcon warning = new ImageIcon(FaceStatePanel.class.getClassLoader().getResource("/" + "warning16x16.png")); private final ImageIcon previewBasic = new ImageIcon(FaceStatePanel.class.getClassLoader().getResource("/" + "face160x160.png"));
private final ImageIcon anonymousFace = new ImageIcon(FaceStatePanel.class.getClassLoader().getResource("/" + "face160x160.png"));
private ImageIcon previewFace = null; private ImageIcon previewFace = null;
public static final String ICON = "head28x28.png"; public static final String ICON = "head28x28.png";
...@@ -265,38 +264,65 @@ public class FaceStatePanel extends ControlPanel { ...@@ -265,38 +264,65 @@ public class FaceStatePanel extends ControlPanel {
* @return ImageIcon either loaded face preview or anonymous face when preview is not found * @return ImageIcon either loaded face preview or anonymous face when preview is not found
*/ */
private ImageIcon getPhoto(HumanFace face, Path path) { private ImageIcon getPhoto(HumanFace face, Path path) {
ImageIcon image;
previewFace = null; previewFace = null;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); BufferedImage image = null;
// If face is loaded to project, preview is loaded from face
if (face != null) { if (face != null) {
if (face.getPreview() != null) { if (face.getPreview() != null) {
previewFace = new ImageIcon(face.getPreview().getScaledInstance((int)screenSize.getWidth() - 100, (int)screenSize.getHeight() - 100, Image.SCALE_FAST)); image = face.getPreview();
photo.setToolTipText("Click to enlarge the image");
return new ImageIcon(face.getPreview().getScaledInstance(240, 160, Image.SCALE_FAST)); } else {
photo.setToolTipText("");
return previewBasic;
} }
photo.setToolTipText("");
return anonymousFace;
}
if (path != null && path.toFile().exists()) {
} else if (path != null && path.toFile().exists()) {
String pathString = path.toString(); String pathString = path.toString();
Path preview = Paths.get(pathString.substring(0, pathString.lastIndexOf(".")).concat("_preview.jpg")); String name = pathString.substring(0, pathString.lastIndexOf('.')); // remove extention
Path preview = path.resolveSibling(name.concat(".jpg"));
try { try {
image = ImageIO.read(preview.toFile());
previewFace = new ImageIcon(ImageIO.read(preview.toFile()).getScaledInstance((int)screenSize.getWidth() - 200, (int)screenSize.getHeight() - 200, Image.SCALE_FAST));
image = new ImageIcon(previewFace.getImage().getScaledInstance(240, 160, Image.SCALE_FAST));
photo.setToolTipText("Click to enlarge the image");
return image;
} catch (IOException ex) { } catch (IOException ex) {
//Exceptions.printStackTrace(ex);) //Exceptions.printStackTrace(ex);)
} }
}
if (image == null) {
// Basic black siluete
photo.setToolTipText("");
return previewBasic;
} }
photo.setToolTipText("");
return anonymousFace; image = scaleAndRotateIfNeeded(image);
previewFace = new ImageIcon(image);
photo.setToolTipText("Click to enlarge the image");
return new ImageIcon(Scalr.resize(image, 240, 160));
}
/**
* Scales photo and rotates if width is bigger than height
* @param image BufferedImage to be scaled or rotated
* @return scaled and rotated image
*/
private BufferedImage scaleAndRotateIfNeeded(BufferedImage image) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
if (image.getWidth() > image.getHeight()) {
image = Scalr.rotate(image, Scalr.Rotation.CW_270, Scalr.OP_ANTIALIAS);
}
image = Scalr.resize(image, (int)screenSize.getHeight() - 200);
return image;
} }
/** /**
......
package cz.fidentis.analyst.project; package cz.fidentis.analyst.project;
import java.awt.Image;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
...@@ -8,6 +7,7 @@ import javax.imageio.ImageIO; ...@@ -8,6 +7,7 @@ import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.imgscalr.Scalr;
/** /**
* List of faces TableModel * List of faces TableModel
...@@ -69,7 +69,12 @@ public class ModelsTableModel extends DefaultTableModel { ...@@ -69,7 +69,12 @@ public class ModelsTableModel extends DefaultTableModel {
} else { } else {
try { try {
BufferedImage image = ImageIO.read(path.toFile()); BufferedImage image = ImageIO.read(path.toFile());
addRow(new Object[]{false, name, new ImageIcon(image.getScaledInstance(75, 50, Image.SCALE_FAST))}); if (image.getWidth() > image.getHeight()) {
image = Scalr.rotate(image, Scalr.Rotation.CW_270, Scalr.OP_ANTIALIAS);
}
//BufferedImage rotatedImage = Scalr.rotate(image, Scalr.Rotation.CW_90, Scalr.OP_ANTIALIAS);
BufferedImage scaledImage = Scalr.resize(image, 70, 55);
addRow(new Object[]{false, name, new ImageIcon(scaledImage)});
} catch (IOException ex) { } catch (IOException ex) {
Exceptions.printStackTrace(ex); Exceptions.printStackTrace(ex);
} }
......
...@@ -211,7 +211,7 @@ ...@@ -211,7 +211,7 @@
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="table.getTableHeader().setOpaque(false);&#xa;table.getTableHeader().setBackground(new java.awt.Color(204,204,204));&#xa;table.getTableHeader().setFont(new java.awt.Font(&quot;Tahoma&quot;, 0, 18));&#xa;model.addTableModelListener(new TableModelListener() {&#xa; public void tableChanged(TableModelEvent e) {&#xa; jTable1TableChanged(e);&#xa; }&#xa;});"> <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="table.getTableHeader().setOpaque(false);&#xa;table.getTableHeader().setBackground(new java.awt.Color(204,204,204));&#xa;table.getTableHeader().setFont(new java.awt.Font(&quot;Tahoma&quot;, 0, 18));&#xa;model.addTableModelListener(new TableModelListener() {&#xa; public void tableChanged(TableModelEvent e) {&#xa; jTable1TableChanged(e);&#xa; }&#xa;});">
<Font name="Tahoma" size="18" style="0"/> <Font name="Tahoma" size="18" style="0"/>
</Property> </Property>
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor" postCode="table.getColumnModel().getColumn(0).setMaxWidth(50);&#xa;table.getColumnModel().getColumn(2).setMaxWidth(75);&#xa;table.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);&#xa;table.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);"> <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor" postCode="table.getColumnModel().getColumn(0).setMaxWidth(50);&#xa;table.getColumnModel().getColumn(2).setMaxWidth(85);&#xa;table.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);&#xa;table.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);">
<Connection code="model" type="code"/> <Connection code="model" type="code"/>
</Property> </Property>
<Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor"> <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
......
...@@ -186,7 +186,7 @@ public class ProjectPanel extends JPanel { ...@@ -186,7 +186,7 @@ public class ProjectPanel extends JPanel {
}); });
table.setModel(model); table.setModel(model);
table.getColumnModel().getColumn(0).setMaxWidth(50); table.getColumnModel().getColumn(0).setMaxWidth(50);
table.getColumnModel().getColumn(2).setMaxWidth(75); table.getColumnModel().getColumn(2).setMaxWidth(85);
table.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50); table.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);
table.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75); table.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);
table.setDragEnabled(true); table.setDragEnabled(true);
...@@ -520,7 +520,8 @@ public class ProjectPanel extends JPanel { ...@@ -520,7 +520,8 @@ public class ProjectPanel extends JPanel {
if (project.addNewPath(path)) { if (project.addNewPath(path)) {
Path preview = path.resolveSibling(name.concat("_preview_small.jpg")); //Path preview = path.resolveSibling(name.concat("_preview_small.jpg"));
Path preview = path.resolveSibling(name.concat(".jpg"));
model.addRowWithName(name, preview); model.addRowWithName(name, preview);
filterPanel.checkAllFacesLoaded(false); filterPanel.checkAllFacesLoaded(false);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment