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) {