1ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye/* 2ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Copyright (C) 2012 The Android Open Source Project 3ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * 4ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 5ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * you may not use this file except in compliance with the License. 6ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * You may obtain a copy of the License at 7ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * 8ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * http://www.eclipse.org/org/documents/epl-v10.php 9ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * 10ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Unless required by applicable law or agreed to in writing, software 11ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * distributed under the License is distributed on an "AS IS" BASIS, 12ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * See the License for the specific language governing permissions and 14ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * limitations under the License. 15ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye */ 16ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyepackage com.android.ide.eclipse.adt.internal.assetstudio; 17ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 18279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.DEFAULT_LAUNCHER_ICON; 19279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 20494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbyeimport com.android.annotations.NonNull; 21279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.assetstudiolib.GraphicGenerator; 22ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport com.android.assetstudiolib.GraphicGenerator.Shape; 23279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.assetstudiolib.GraphicGeneratorContext; 24279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.ide.eclipse.adt.AdtPlugin; 25279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.ide.eclipse.adt.internal.wizards.templates.TemplateManager; 26ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 27ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport org.eclipse.core.resources.IProject; 28ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport org.eclipse.swt.graphics.RGB; 29ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 30494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbyeimport java.awt.Font; 31494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbyeimport java.awt.GraphicsEnvironment; 32279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.awt.image.BufferedImage; 33ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport java.io.File; 34279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.io.IOException; 35279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.util.HashMap; 36279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.util.Map; 37279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 38279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport javax.imageio.ImageIO; 39ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 40ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye/** 41ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Value object for the AssetStudio wizard. These values are both set by the 42ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * wizard as well as read by the wizard initially, so passing in a configured 43ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * {@link CreateAssetSetWizardState} to the icon generator is possible. 44ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye */ 45279445ad4561895db41309681de8dd1544d0ae22Tor Norbyepublic class CreateAssetSetWizardState implements GraphicGeneratorContext { 46ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** 47ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * The type of asset being created. This field is static such that when you 48ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * bring up the wizard repeatedly (for example to create multiple 49ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * notification icons) you don't have to keep selecting the same type over 50ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * and over. 51ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye */ 52ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public static AssetType sLastType = AssetType.LAUNCHER; 53ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 54ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The type of asset to be created */ 55ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public AssetType type = sLastType; 56ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 57ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The base name to use for the created icons */ 58ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public String outputName; 59ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 60ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The minimum SDK being targeted */ 61ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public int minSdk = -1; 62ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 63ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The project to create the icons into */ 64ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public IProject project; 65ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 66ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** Whether empty space around the source image should be trimmed */ 675890cb76e4ee5407f7a67f8de79d0f3a7ce1e1abTor Norbye public boolean trim = true; 68ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 69ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The type of source the icon is being created from */ 70ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public SourceType sourceType = SourceType.TEXT; 71ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 72ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** If {@link #sourceType} is a {@link SourceType#CLIPART}, the name of the clipart image */ 73ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public String clipartName; 74ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 75ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** If {@link #sourceType} is a {@link SourceType#IMAGE}, the path to the input image */ 76ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public File imagePath; 77ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 78ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** If {@link #sourceType} is a {@link SourceType#TEXT}, the text to render */ 79ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public String text = "aA"; 80ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 81ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The amount of padding to add around the source image */ 82ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public int padding = 15; 83ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 84ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The background shape */ 85ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public Shape shape = Shape.SQUARE; 86ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 87802de810020fba3f86282cd1d66597a2a41698e3Tor Norbye /** Whether the image should be cropped */ 88802de810020fba3f86282cd1d66597a2a41698e3Tor Norbye public boolean crop; 89802de810020fba3f86282cd1d66597a2a41698e3Tor Norbye 90279445ad4561895db41309681de8dd1544d0ae22Tor Norbye /** Whether to use Holo Dark for action bar icons */ 91279445ad4561895db41309681de8dd1544d0ae22Tor Norbye public boolean holoDark; 92279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 93ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The background color to use for the shape (unless the shape is {@link Shape#NONE} */ 94ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public RGB background = new RGB(0xff, 0x00, 0x00); 95ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 96ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** The background color to use for the text or clipart (unless shape is {@link Shape#NONE} */ 97ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public RGB foreground = new RGB(0x00, 0x00, 0x00); 98ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 99494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye /** If {@link #sourceType} is a {@link SourceType#TEXT}, the font of the text to render */ 100494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye private Font mTextFont; 101494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye 102279445ad4561895db41309681de8dd1544d0ae22Tor Norbye private Map<String, BufferedImage> mImageCache = null; 103279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 104494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye /** 105494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * Gets the text font to be used for text rendering if the 106494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * {@link #sourceType} is a {@link SourceType#TEXT} 107494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * 108494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * @return the text font 109494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye */ 110494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye @NonNull 111494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye public Font getTextFont() { 112494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye if (mTextFont == null) { 113494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 114494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye String[] fontNames = env.getAvailableFontFamilyNames(); 115494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye for (String familyName : fontNames) { 116494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye if (familyName.equals("Helvetica")) { 117494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye mTextFont = new java.awt.Font(familyName, java.awt.Font.BOLD, 512); 118494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye break; 119494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 120494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 121494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye if (mTextFont == null) { 122494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye for (String familyName : fontNames) { 123494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye if (familyName.equals("Arial")) { 124494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye mTextFont = new java.awt.Font(familyName, java.awt.Font.BOLD, 512); 125494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye break; 126494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 127494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 128494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye 129494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye if (mTextFont == null) { 130494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye mTextFont = new java.awt.Font("SansSerif", java.awt.Font.BOLD, 512); 131494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 132494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 133494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 134494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye 135494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye return mTextFont; 136494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 137494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye 138494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye /** 139494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * Sets the text font to be used for text rendering if the 140494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * {@link #sourceType} is a {@link SourceType#TEXT} 141494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * 142494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye * @param textFont the font to use 143494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye */ 144494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye public void setTextFont(@NonNull Font textFont) { 145494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye mTextFont = textFont; 146494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye } 147494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye 148ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** Types of sources that the asset studio can use to generate icons from */ 149ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye public enum SourceType { 150ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** Generate the icon using the image pointed to by {@link #imagePath} */ 151ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye IMAGE, 152ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 153ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** Generate the icon using the clipart named by {@link #clipartName} */ 154ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye CLIPART, 155ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye 156ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye /** Generate the icon using the text in {@link #text} */ 157ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye TEXT 158ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye } 159279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 160279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // ---- Implements GraphicGeneratorContext ---- 161279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 162279445ad4561895db41309681de8dd1544d0ae22Tor Norbye @Override 163279445ad4561895db41309681de8dd1544d0ae22Tor Norbye public BufferedImage loadImageResource(String relativeName) { 164279445ad4561895db41309681de8dd1544d0ae22Tor Norbye try { 165279445ad4561895db41309681de8dd1544d0ae22Tor Norbye return getCachedImage(relativeName, true); 166279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } catch (IOException e) { 167279445ad4561895db41309681de8dd1544d0ae22Tor Norbye AdtPlugin.log(e, null); 168279445ad4561895db41309681de8dd1544d0ae22Tor Norbye return null; 169279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 170279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 171279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 172279445ad4561895db41309681de8dd1544d0ae22Tor Norbye BufferedImage getCachedImage(String path, boolean isPluginRelative) 173279445ad4561895db41309681de8dd1544d0ae22Tor Norbye throws IOException { 174279445ad4561895db41309681de8dd1544d0ae22Tor Norbye BufferedImage image = mImageCache != null ? mImageCache.get(path) : null; 175279445ad4561895db41309681de8dd1544d0ae22Tor Norbye if (image == null) { 176279445ad4561895db41309681de8dd1544d0ae22Tor Norbye image = getImage(path, isPluginRelative); 177279445ad4561895db41309681de8dd1544d0ae22Tor Norbye if (mImageCache == null) { 178279445ad4561895db41309681de8dd1544d0ae22Tor Norbye mImageCache = new HashMap<String, BufferedImage>(); 179279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 180279445ad4561895db41309681de8dd1544d0ae22Tor Norbye mImageCache.put(path, image); 181279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 182279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 183279445ad4561895db41309681de8dd1544d0ae22Tor Norbye return image; 184279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 185279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 186279445ad4561895db41309681de8dd1544d0ae22Tor Norbye @NonNull 187279445ad4561895db41309681de8dd1544d0ae22Tor Norbye static BufferedImage getImage(@NonNull String path, boolean isPluginRelative) 188279445ad4561895db41309681de8dd1544d0ae22Tor Norbye throws IOException { 189279445ad4561895db41309681de8dd1544d0ae22Tor Norbye BufferedImage image = null; 190279445ad4561895db41309681de8dd1544d0ae22Tor Norbye if (isPluginRelative) { 191279445ad4561895db41309681de8dd1544d0ae22Tor Norbye image = GraphicGenerator.getStencilImage(path); 192279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } else { 193279445ad4561895db41309681de8dd1544d0ae22Tor Norbye if (path.equals(DEFAULT_LAUNCHER_ICON)) { 194279445ad4561895db41309681de8dd1544d0ae22Tor Norbye File file = TemplateManager.getTemplateLocation( 195279445ad4561895db41309681de8dd1544d0ae22Tor Norbye "projects/NewAndroidApplication/root/res/drawable-xhdpi/ic_launcher.png"); //$NON-NLS-1$ 196279445ad4561895db41309681de8dd1544d0ae22Tor Norbye if (file != null) { 197279445ad4561895db41309681de8dd1544d0ae22Tor Norbye path = file.getPath(); 198279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } else { 199279445ad4561895db41309681de8dd1544d0ae22Tor Norbye image = GraphicGenerator.getStencilImage("user.png"); 200279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 201279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 202279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 203279445ad4561895db41309681de8dd1544d0ae22Tor Norbye File file = new File(path); 204279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 205279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // Requires Batik 206279445ad4561895db41309681de8dd1544d0ae22Tor Norbye //if (file.getName().endsWith(DOT_SVG)) { 207279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // image = loadSvgImage(file); 208279445ad4561895db41309681de8dd1544d0ae22Tor Norbye //} 209279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 210279445ad4561895db41309681de8dd1544d0ae22Tor Norbye if (image == null) { 211279445ad4561895db41309681de8dd1544d0ae22Tor Norbye image = ImageIO.read(file); 212279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 213279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 214279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 215279445ad4561895db41309681de8dd1544d0ae22Tor Norbye if (image == null) { 216279445ad4561895db41309681de8dd1544d0ae22Tor Norbye image = new BufferedImage(1,1, BufferedImage.TYPE_INT_ARGB); 217279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 218279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 219279445ad4561895db41309681de8dd1544d0ae22Tor Norbye return image; 220279445ad4561895db41309681de8dd1544d0ae22Tor Norbye } 221279445ad4561895db41309681de8dd1544d0ae22Tor Norbye 222279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // This requires Batik for SVG rendering 223279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // 224279445ad4561895db41309681de8dd1544d0ae22Tor Norbye //public static BufferedImage loadSvgImage(File file) { 225279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // BufferedImageTranscoder transcoder = new BufferedImageTranscoder(); 226279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // 227279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // String svgURI = file.toURI().toString(); 228279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // TranscoderInput input = new TranscoderInput(svgURI); 229279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // 230279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // try { 231279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // transcoder.transcode(input, null); 232279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // } catch (TranscoderException e) { 233279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // e.printStackTrace(); 234279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // return null; 235279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // } 236279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // 237279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // return transcoder.decodedImage; 238279445ad4561895db41309681de8dd1544d0ae22Tor Norbye //} 239279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // 240279445ad4561895db41309681de8dd1544d0ae22Tor Norbye ///** 241279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // * A dummy implementation of an {@link ImageTranscoder} that simply stores the {@link 242279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // * BufferedImage} generated by the SVG library. 243279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // */ 244279445ad4561895db41309681de8dd1544d0ae22Tor Norbye //private static class BufferedImageTranscoder extends ImageTranscoder { 245279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // public BufferedImage decodedImage; 246279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // 247279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // @Override 248279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // public BufferedImage createImage(int w, int h) { 249279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 250279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // } 251279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // 252279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // @Override 253279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // public void writeImage(BufferedImage image, TranscoderOutput output) 254279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // throws TranscoderException { 255279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // this.decodedImage = image; 256279445ad4561895db41309681de8dd1544d0ae22Tor Norbye // } 257279445ad4561895db41309681de8dd1544d0ae22Tor Norbye //} 258ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye} 259