]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/image/ImageUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / image / ImageUtils.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g2d.image;\r
13 \r
14 import java.awt.GraphicsConfiguration;\r
15 \r
16 import org.simantics.g2d.image.Image.Feature;\r
17 import org.simantics.g2d.image.impl.AWTImage;\r
18 import org.simantics.g2d.image.impl.ImageProxy;\r
19 import org.simantics.g2d.image.impl.MipMapBufferedImage;\r
20 import org.simantics.g2d.image.impl.MipMapVRamBufferedImage;\r
21 import org.simantics.g2d.image.impl.Shadow;\r
22 import org.simantics.g2d.image.impl.VRamBufferedImage;\r
23 import org.simantics.g2d.image.impl.Shadow.ShadowParameters;\r
24 \r
25 /**\r
26  * Image utilities.\r
27  * \r
28  * @See {@link ProviderUtils}\r
29  * @See {@link Image}\r
30  * @author Toni Kalajainen\r
31  */\r
32 public class ImageUtils {\r
33 \r
34     /**\r
35      * Adapt AWT {@link java.awt.image.BufferedImage} to {@link Image}\r
36      * @param awtImage\r
37      * @return\r
38      */\r
39     public static Image adaptAWT(java.awt.image.BufferedImage awtImage)\r
40     {\r
41         return new AWTImage(awtImage);\r
42     }\r
43 \r
44     /**\r
45      * Creates a memory backed buffer for an Image.\r
46      * Use this with vector images and shadows.\r
47      * \r
48      * @param source\r
49      * @return video-ram optimized version of the symbol\r
50      */\r
51     public static Image createBuffer(Image source)\r
52     {\r
53         return new MipMapBufferedImage(source);\r
54     }\r
55 \r
56     /**\r
57      * Creates a proxy of the source image. Proxy has a strong reference to the\r
58      * source but weak from source to proxy and thus a proxy prevents garbage\r
59      * collection of the source image.\r
60      * \r
61      * Example:\r
62      *  <pre>\r
63      *   Image i = ProviderUtils.at("https://www.simantics.org/simantics/simantics/logo.jpg");\r
64      *   Image p1 = ImageUtils.proxy(i);\r
65      *   Image p2 = ImageUtils.proxy(i);\r
66      *   i = null;\r
67      * \r
68      *   deliver p1 and p2 to user interface components.\r
69      * \r
70      *   i stays in memory until p1 and p2 are garbage collected.\r
71      *  </pre>\r
72      * \r
73      * @param source\r
74      * @return\r
75      */\r
76     public static Image createProxy(Image source)\r
77     {\r
78         return new ImageProxy(source);\r
79     }\r
80 \r
81     /**\r
82      * Creates an instance of Image that reflects to the shadow of the source Image.\r
83      * <p>\r
84      * Shadow is created every time the image is painted. Usage of memory buffer\r
85      * is recommended (see createBuffer() ).\r
86      * \r
87      * @param source\r
88      * @param shadow\r
89      * @return\r
90      */\r
91     public static Image createShadow(Image source, ShadowParameters shadow)\r
92     {\r
93         return new Shadow(source, shadow);\r
94     }\r
95 \r
96     public static Image createShadow(Image source, ShadowParameters shadow, int width, int height)\r
97     {\r
98         return new Shadow(source, shadow, width, height);\r
99     }\r
100 \r
101     /**\r
102      * Raster symbol to video memory (lazy).\r
103      * \r
104      * @param ps\r
105      * @param gc Graphics configuration\r
106      * @return video-ram optimized version of the symbol\r
107      */\r
108     public static Image createVideoMemoryBuffer(Image ps, GraphicsConfiguration gc)\r
109     {\r
110         if (gc==null) throw new IllegalArgumentException("null arg");\r
111         if (ps instanceof VRamBufferedImage)\r
112         {\r
113             VRamBufferedImage p = (VRamBufferedImage) ps;\r
114             if (p.getGraphicsConfiguration()!=gc) ps = p.getSource(); else return ps;\r
115         }\r
116         if (ps instanceof MipMapVRamBufferedImage)\r
117         {\r
118             MipMapVRamBufferedImage p = (MipMapVRamBufferedImage) ps;\r
119             if (p.getGraphicsConfiguration()!=gc) ps = p.getSource(); else return ps;\r
120         }\r
121         if (ps.getFeatures().contains(Feature.Vector))\r
122             return new MipMapVRamBufferedImage(ps, gc);\r
123         else\r
124             return new VRamBufferedImage(ps, gc);\r
125     }\r
126 \r
127 \r
128 \r
129 \r
130 }\r
131 \r