Improve quality of generated images,see
Topic:https://www.eclipse.org/forums/index.php/t/815226/
thanks Greg Ray
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/AbstractDiagramGraphicalViewer.java b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/AbstractDiagramGraphicalViewer.java
index 3afb86b..57d7b9d 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/AbstractDiagramGraphicalViewer.java
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/AbstractDiagramGraphicalViewer.java
@@ -42,6 +42,7 @@
import org.eclipse.gef.editparts.LayerManager;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
@@ -259,8 +260,17 @@
// create a new image and repaint the graph
final Display display = Display.getDefault();
image = new Image(display, width, height);
+
gc = new GC(image);
+ gc.setAntialias(SWT.ON);
+ gc.setTextAntialias(SWT.OFF);
+ gc.setAdvanced(true);
+
graphics = new SWTGraphics(gc);
+ graphics.setAntialias(SWT.ON);
+ graphics.setTextAntialias(SWT.OFF);
+ graphics.setAdvanced(true);
+
figure.paint(graphics);
} catch (Exception ex) {
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/ActivityDiagramService.java b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/ActivityDiagramService.java
index c4eae89..48ea18a 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/ActivityDiagramService.java
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/viewer/ActivityDiagramService.java
@@ -10,6 +10,7 @@
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.gef.viewer;
+import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
@@ -18,6 +19,12 @@
import java.util.List;
import java.util.Map;
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.FileImageOutputStream;
+
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.epf.diagram.model.util.GraphicalDataHelper;
import org.eclipse.epf.diagram.model.util.GraphicalDataManager;
@@ -38,13 +45,12 @@
import org.eclipse.epf.uma.VariabilityElement;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.epf.diagram.ui.utils.ImageUtils;
/**
@@ -366,10 +372,26 @@
if (!f.exists()) {
f.createNewFile();
}
- OutputStream os = new FileOutputStream(f);
- ImageLoader loader = new ImageLoader();
- loader.data = new ImageData[] { image.getImageData() };
- loader.save(os, SWT.IMAGE_JPEG);
+// OutputStream os = new FileOutputStream(f);
+// ImageLoader loader = new ImageLoader();
+// loader.data = new ImageData[] { image.getImageData() };
+// loader.save(os, SWT.IMAGE_JPEG);
+
+// /*
+ // Setting compression level to maximum quality
+ Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); //$NON-NLS-1$
+ ImageWriter writer = (ImageWriter)iter.next();
+ ImageWriteParam iwp = writer.getDefaultWriteParam();
+ iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+ iwp.setCompressionQuality(1);
+
+ FileImageOutputStream output = new FileImageOutputStream(f);
+ writer.setOutput(output);
+ BufferedImage bufferedImage = ImageUtils.convertToAWT(image.getImageData());
+ IIOImage iioImage = new IIOImage(bufferedImage, null, null);
+ writer.write(null, iioImage, iwp);
+ writer.dispose();
+// */
diagramInfo.setImageFilePath(imgPath);
} else {
diff --git a/1.5/plugins/org.eclipse.epf.diagram.ui/META-INF/MANIFEST.MF b/1.5/plugins/org.eclipse.epf.diagram.ui/META-INF/MANIFEST.MF
index 811af0b..447f744 100644
--- a/1.5/plugins/org.eclipse.epf.diagram.ui/META-INF/MANIFEST.MF
+++ b/1.5/plugins/org.eclipse.epf.diagram.ui/META-INF/MANIFEST.MF
@@ -18,5 +18,6 @@
Eclipse-LazyStart: true
Export-Package: org.eclipse.epf.diagram.ui,
org.eclipse.epf.diagram.ui.service,
+ org.eclipse.epf.diagram.ui.utils,
org.eclipse.epf.diagram.ui.viewer
Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/service/DiagramImageService.java b/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/service/DiagramImageService.java
index b4d8802..08193c5 100644
--- a/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/service/DiagramImageService.java
+++ b/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/service/DiagramImageService.java
@@ -10,9 +10,10 @@
//------------------------------------------------------------------------------
package org.eclipse.epf.diagram.ui.service;
+import java.awt.image.BufferedImage;
import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
+//import java.io.FileOutputStream;
+//import java.io.OutputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -20,6 +21,12 @@
import java.util.Map;
import java.util.Set;
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.FileImageOutputStream;
+
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.epf.diagram.ad.part.ActivityDiagramEditorPlugin;
@@ -49,6 +56,7 @@
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.library.layout.ProcessAdapterFactoryFilter;
import org.eclipse.epf.library.layout.diagram.DiagramInfo;
+import org.eclipse.epf.diagram.ui.utils.ImageUtils;
import org.eclipse.epf.library.services.SafeUpdateController;
import org.eclipse.epf.library.util.ResourceHelper;
import org.eclipse.epf.uma.Activity;
@@ -60,8 +68,8 @@
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.ImageLoader;
+//import org.eclipse.swt.graphics.ImageData;
+//import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
@@ -399,10 +407,26 @@
if (!f.exists()) {
f.createNewFile();
}
- OutputStream os = new FileOutputStream(f);
- ImageLoader loader = new ImageLoader();
- loader.data = new ImageData[] { image.getImageData() };
- loader.save(os, SWT.IMAGE_JPEG);
+// OutputStream os = new FileOutputStream(f);
+// ImageLoader loader = new ImageLoader();
+// loader.data = new ImageData[] { image.getImageData() };
+// loader.save(os, SWT.IMAGE_JPEG);
+
+// /*
+ // Setting compression level to maximum quality
+ Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); //$NON-NLS-1$
+ ImageWriter writer = (ImageWriter)iter.next();
+ ImageWriteParam iwp = writer.getDefaultWriteParam();
+ iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+ iwp.setCompressionQuality(1);
+
+ FileImageOutputStream output = new FileImageOutputStream(f);
+ writer.setOutput(output);
+ BufferedImage bufferedImage = ImageUtils.convertToAWT(image.getImageData());
+ IIOImage iioImage = new IIOImage(bufferedImage, null, null);
+ writer.write(null, iioImage, iwp);
+ writer.dispose();
+// */
} else {
DiagramUIPlugin.getDefault().getLogger().logError(
"Failed to create diagram image for" + e); //$NON-NLS-1$
diff --git a/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/viewer/AbstractDiagramGraphicalViewer.java b/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/viewer/AbstractDiagramGraphicalViewer.java
index 7052297..e6432ee 100644
--- a/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/viewer/AbstractDiagramGraphicalViewer.java
+++ b/1.5/plugins/org.eclipse.epf.diagram.ui/src/org/eclipse/epf/diagram/ui/viewer/AbstractDiagramGraphicalViewer.java
@@ -32,6 +32,7 @@
import org.eclipse.gef.editparts.LayerManager;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
@@ -161,7 +162,14 @@
final Display display = Display.getDefault();
image = new Image(display, width, height);
gc = new GC(image);
+ gc.setAntialias(SWT.ON);
+ gc.setTextAntialias(SWT.OFF);
+ gc.setAdvanced(true);
+
graphics = new SWTGraphics(gc);
+ graphics.setAntialias(SWT.ON);
+ graphics.setTextAntialias(SWT.OFF);
+ graphics.setAdvanced(true);
figure.paint(graphics);
} catch (Exception ex) {
diff --git a/1.5/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/diagram/RoleDiagramPublisher.java b/1.5/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/diagram/RoleDiagramPublisher.java
index 24a7eb6..55923c4 100644
--- a/1.5/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/diagram/RoleDiagramPublisher.java
+++ b/1.5/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/diagram/RoleDiagramPublisher.java
@@ -30,7 +30,11 @@
import java.util.List;
import java.util.Properties;
+import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.FileImageOutputStream;
import javax.swing.JPanel;
import org.eclipse.core.runtime.Platform;
@@ -507,6 +511,18 @@
parentFolder.mkdirs();
}
ImageIO.write(optimalImage, "jpg", jpgFile); //$NON-NLS-1$
+ // Setting compression level to maximum quality
+ Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); //$NON-NLS-1$
+ ImageWriter writer = (ImageWriter)iter.next();
+ ImageWriteParam iwp = writer.getDefaultWriteParam();
+ iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+ iwp.setCompressionQuality(1);
+
+ FileImageOutputStream output = new FileImageOutputStream(jpgFile);
+ writer.setOutput(output);
+ IIOImage image = new IIOImage(optimalImage, null, null);
+ writer.write(null, image, iwp);
+ writer.dispose();
elementDiagram.setImageFileName(jpgFile.getName());
return elementDiagram;
} catch (Exception e) {