/* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores * CA 94065 USA or visit www.oracle.com if you need additional information or * have any questions. */ package com.sun.lwuit.resources.editor.editors; import com.sun.lwuit.EncodedImage; import com.sun.lwuit.util.EditableResources; import java.awt.AlphaComposite; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import javax.imageio.ImageIO; import javax.swing.DefaultListModel; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; /** * Part of the image border wizard in the theme * * @author Shai Almog */ public class ImageBorderCuttingWizard extends javax.swing.JPanel { private EditableResources res; private String theme; private ImageBorderWizard wiz; private ImageBorderAppliesToWizard applies; /** Creates new form ImageBorderCuttingWizard */ public ImageBorderCuttingWizard(EditableResources res, String theme, ImageBorderWizard wiz, ImageBorderAppliesToWizard applies) { this.res = res; this.theme = theme; this.wiz = wiz; this.applies = applies; initComponents(); bottom.setModel(new SpinnerNumberModel(5, 1, 1000, 1)); left.setModel(new SpinnerNumberModel(5, 1, 1000, 1)); right.setModel(new SpinnerNumberModel(5, 1, 1000, 1)); top.setModel(new SpinnerNumberModel(5, 1, 1000, 1)); zoom.setModel(new SpinnerNumberModel(1, 1, 10, 1)); cropTop.setModel(new SpinnerNumberModel(0, 0, 1000, 1)); cropBottom.setModel(new SpinnerNumberModel(0, 0, 1000, 1)); cropLeft.setModel(new SpinnerNumberModel(0, 0, 1000, 1)); cropRight.setModel(new SpinnerNumberModel(0, 0, 1000, 1)); wiz.setWiz(imageLabel); multiImageComboActionPerformed(null); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jPanel1 = new javax.swing.JPanel(); imageLabel = new ImageLabel(); jLabel1 = new javax.swing.JLabel(); zoom = new javax.swing.JSpinner(); jLabel2 = new javax.swing.JLabel(); top = new javax.swing.JSpinner(); jLabel3 = new javax.swing.JLabel(); bottom = new javax.swing.JSpinner(); jLabel4 = new javax.swing.JLabel(); left = new javax.swing.JSpinner(); jLabel5 = new javax.swing.JLabel(); right = new javax.swing.JSpinner(); jLabel6 = new javax.swing.JLabel(); cropTop = new javax.swing.JSpinner(); jLabel7 = new javax.swing.JLabel(); cropBottom = new javax.swing.JSpinner(); jLabel8 = new javax.swing.JLabel(); cropLeft = new javax.swing.JSpinner(); jLabel9 = new javax.swing.JLabel(); cropRight = new javax.swing.JSpinner(); multiImageCombo = new javax.swing.JComboBox(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); lowDPI = new javax.swing.JCheckBox(); mediumDPI = new javax.swing.JCheckBox(); highDPI = new javax.swing.JCheckBox(); veryHighDPI = new javax.swing.JCheckBox(); veryLowDPI = new javax.swing.JCheckBox(); hdDPI = new javax.swing.JCheckBox(); FormListener formListener = new FormListener(); setOpaque(false); jScrollPane1.setName("jScrollPane1"); // NOI18N jPanel1.setName("jPanel1"); // NOI18N imageLabel.setName("imageLabel"); // NOI18N jPanel1.add(imageLabel); jScrollPane1.setViewportView(jPanel1); jLabel1.setText("Zoom"); jLabel1.setName("jLabel1"); // NOI18N zoom.setName("zoom"); // NOI18N zoom.addChangeListener(formListener); jLabel2.setText("Top"); jLabel2.setName("jLabel2"); // NOI18N top.setName("top"); // NOI18N top.addChangeListener(formListener); jLabel3.setText("Bottom"); jLabel3.setName("jLabel3"); // NOI18N bottom.setName("bottom"); // NOI18N bottom.addChangeListener(formListener); jLabel4.setText("Left"); jLabel4.setName("jLabel4"); // NOI18N left.setName("left"); // NOI18N left.addChangeListener(formListener); jLabel5.setText("Right"); jLabel5.setName("jLabel5"); // NOI18N right.setName("right"); // NOI18N right.addChangeListener(formListener); jLabel6.setText("Crop Top"); jLabel6.setName("jLabel6"); // NOI18N cropTop.setName("cropTop"); // NOI18N cropTop.addChangeListener(formListener); jLabel7.setText("Crop Bottom"); jLabel7.setName("jLabel7"); // NOI18N cropBottom.setName("cropBottom"); // NOI18N cropBottom.addChangeListener(formListener); jLabel8.setText("Crop Left"); jLabel8.setName("jLabel8"); // NOI18N cropLeft.setName("cropLeft"); // NOI18N cropLeft.addChangeListener(formListener); jLabel9.setText("Crop Right"); jLabel9.setName("jLabel9"); // NOI18N cropRight.setName("cropRight"); // NOI18N cropRight.addChangeListener(formListener); multiImageCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Generate RGB Image", "Generate Medium Resolution MultiImage", "Generate High Resolution MultiImage", "Generate Very High Resolution MultiImage", "Generate HD Resolution MultiImage" })); multiImageCombo.setSelectedIndex(2); multiImageCombo.setName("multiImageCombo"); // NOI18N multiImageCombo.addActionListener(formListener); jLabel10.setText("Geneate Multi Image"); jLabel10.setName("jLabel10"); // NOI18N jLabel11.setText("Auto Scale To DPI"); jLabel11.setName("jLabel11"); // NOI18N lowDPI.setText("Low"); lowDPI.setName("lowDPI"); // NOI18N mediumDPI.setText("Medium"); mediumDPI.setName("mediumDPI"); // NOI18N highDPI.setText("High"); highDPI.setName("highDPI"); // NOI18N veryHighDPI.setText("Very High"); veryHighDPI.setName("veryHighDPI"); // NOI18N veryLowDPI.setText("Very Low"); veryLowDPI.setName("veryLowDPI"); // NOI18N hdDPI.setText("HD"); hdDPI.setName("hdDPI"); // NOI18N org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jLabel1) .add(jLabel2) .add(jLabel3) .add(jLabel4) .add(jLabel5)) .add(18, 18, 18) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(right) .add(left) .add(bottom) .add(top) .add(zoom)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jLabel6) .add(jLabel7) .add(jLabel8) .add(jLabel9)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(cropRight, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(cropLeft, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(cropBottom, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(cropTop, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(55, 55, 55) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jLabel10) .add(jLabel11)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(mediumDPI) .add(highDPI) .add(multiImageCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(veryLowDPI) .add(lowDPI)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(hdDPI) .add(veryHighDPI))))) .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 563, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 208, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel1) .add(zoom, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(multiImageCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel10)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel2) .add(top, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel6) .add(cropTop, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel11) .add(veryLowDPI) .add(veryHighDPI)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel3) .add(bottom, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel7) .add(cropBottom, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(lowDPI) .add(hdDPI)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel4) .add(left, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel8) .add(cropLeft, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(mediumDPI)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel5) .add(right, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel9) .add(cropRight, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(highDPI)) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); } // Code for dispatching events from components to event handlers. private class FormListener implements java.awt.event.ActionListener, javax.swing.event.ChangeListener { FormListener() {} public void actionPerformed(java.awt.event.ActionEvent evt) { if (evt.getSource() == multiImageCombo) { ImageBorderCuttingWizard.this.multiImageComboActionPerformed(evt); } } public void stateChanged(javax.swing.event.ChangeEvent evt) { if (evt.getSource() == zoom) { ImageBorderCuttingWizard.this.zoomStateChanged(evt); } else if (evt.getSource() == top) { ImageBorderCuttingWizard.this.topStateChanged(evt); } else if (evt.getSource() == bottom) { ImageBorderCuttingWizard.this.bottomStateChanged(evt); } else if (evt.getSource() == left) { ImageBorderCuttingWizard.this.leftStateChanged(evt); } else if (evt.getSource() == right) { ImageBorderCuttingWizard.this.rightStateChanged(evt); } else if (evt.getSource() == cropTop) { ImageBorderCuttingWizard.this.cropTopStateChanged(evt); } else if (evt.getSource() == cropBottom) { ImageBorderCuttingWizard.this.cropBottomStateChanged(evt); } else if (evt.getSource() == cropLeft) { ImageBorderCuttingWizard.this.cropLeftStateChanged(evt); } else if (evt.getSource() == cropRight) { ImageBorderCuttingWizard.this.cropRightStateChanged(evt); } } }// </editor-fold>//GEN-END:initComponents private void zoomStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_zoomStateChanged imageLabel.revalidate(); }//GEN-LAST:event_zoomStateChanged private void topStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_topStateChanged imageLabel.repaint(); }//GEN-LAST:event_topStateChanged private void bottomStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_bottomStateChanged imageLabel.repaint(); }//GEN-LAST:event_bottomStateChanged private void leftStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_leftStateChanged imageLabel.repaint(); }//GEN-LAST:event_leftStateChanged private void rightStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_rightStateChanged imageLabel.repaint(); }//GEN-LAST:event_rightStateChanged private void cropTopStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_cropTopStateChanged imageLabel.repaint(); }//GEN-LAST:event_cropTopStateChanged private void cropBottomStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_cropBottomStateChanged imageLabel.repaint(); }//GEN-LAST:event_cropBottomStateChanged private void cropLeftStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_cropLeftStateChanged imageLabel.repaint(); }//GEN-LAST:event_cropLeftStateChanged private void cropRightStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_cropRightStateChanged imageLabel.repaint(); }//GEN-LAST:event_cropRightStateChanged private void enableChecks(boolean b) { lowDPI.setEnabled(b); mediumDPI.setEnabled(b); veryHighDPI.setEnabled(b); veryLowDPI.setEnabled(b); hdDPI.setEnabled(b); highDPI.setEnabled(b); } private void multiImageComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_multiImageComboActionPerformed switch(multiImageCombo.getSelectedIndex()) { // Generate RGB Image case 0: enableChecks(false); break; // Generate Medium Resolution MultiImage case 1: enableChecks(true); mediumDPI.setEnabled(false); mediumDPI.setSelected(false); break; // Generate High Resolution MultiImage case 2: enableChecks(true); highDPI.setEnabled(false); highDPI.setSelected(false); break; // Generate Very High Resolution MultiImage case 3: enableChecks(true); veryHighDPI.setEnabled(false); veryHighDPI.setSelected(false); break; // Generate HD Resolution MultiImage case 4: enableChecks(true); hdDPI.setEnabled(false); hdDPI.setSelected(false); break; } }//GEN-LAST:event_multiImageComboActionPerformed public void generate() { if(applies.getAppliesTo().getModel().getSize() == 0) { JOptionPane.showMessageDialog(this, "You haven't selected components to apply this border to!\nPlease go to the apply tab and ADD component types/styles", "No Components Selected", JOptionPane.ERROR_MESSAGE); return; } BufferedImage img = wiz.getImage(); BufferedImage buff = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D bg2d = buff.createGraphics(); bg2d.drawImage(img.getSubimage(get(cropLeft), get(cropTop), img.getWidth() - get(cropLeft) - get(cropRight), img.getHeight() - get(cropTop) - get(cropBottom)), get(cropLeft), get(cropTop), null); bg2d.dispose(); img = buff; BufferedImage topLeft = img.getSubimage(0, 0, get(left), get(top)); BufferedImage topRight = img.getSubimage(img.getWidth() - get(right), 0, get(right), get(top)); BufferedImage bottomLeft = img.getSubimage(0, img.getHeight() - get(bottom), get(left), get(bottom)); BufferedImage bottomRight = img.getSubimage(img.getWidth() - get(right), img.getHeight() - get(bottom), get(right), get(bottom)); BufferedImage center = img.getSubimage(get(left), get(top), img.getWidth() - get(right) - get(left), img.getHeight() - get(bottom) - get(top)); BufferedImage topImage = img.getSubimage(get(left), 0, img.getWidth() - get(left) - get(right), get(top)); BufferedImage bottomImage = img.getSubimage(get(left), img.getHeight() - get(bottom), img.getWidth() - get(left) - get(right), get(bottom)); BufferedImage leftImage = img.getSubimage(0, get(top), get(left), img.getHeight() - get(top) - get(bottom)); BufferedImage rightImage = img.getSubimage(img.getWidth() - get(right), get(top), get(right), img.getHeight() - get(top) - get(bottom)); com.sun.lwuit.EncodedImage topLeftLwuit = com.sun.lwuit.EncodedImage.create(toPng(topLeft)); com.sun.lwuit.EncodedImage topRightLwuit = com.sun.lwuit.EncodedImage.create(toPng(topRight)); com.sun.lwuit.EncodedImage bottomLeftLwuit = com.sun.lwuit.EncodedImage.create(toPng(bottomLeft)); com.sun.lwuit.EncodedImage bottomRightLwuit = com.sun.lwuit.EncodedImage.create(toPng(bottomRight)); com.sun.lwuit.EncodedImage centerLwuit = com.sun.lwuit.EncodedImage.create(toPng(center)); com.sun.lwuit.EncodedImage topImageLwuit = com.sun.lwuit.EncodedImage.create(toPng(topImage)); com.sun.lwuit.EncodedImage bottomImageLwuit = com.sun.lwuit.EncodedImage.create(toPng(bottomImage)); com.sun.lwuit.EncodedImage leftImageLwuit = com.sun.lwuit.EncodedImage.create(toPng(leftImage)); com.sun.lwuit.EncodedImage rightImageLwuit = com.sun.lwuit.EncodedImage.create(toPng(rightImage)); String prefix = (String)applies.getAppliesTo().getModel().getElementAt(0); topLeftLwuit = storeImage(topLeftLwuit, prefix +"TopL"); topRightLwuit = storeImage(topRightLwuit, prefix +"TopR"); bottomLeftLwuit = storeImage(bottomLeftLwuit, prefix +"BottomL"); bottomRightLwuit = storeImage(bottomRightLwuit, prefix +"BottomR"); centerLwuit = storeImage(centerLwuit, prefix + "Center"); topImageLwuit = storeImage(topImageLwuit, prefix + "Top"); bottomImageLwuit = storeImage(bottomImageLwuit, prefix + "Bottom"); leftImageLwuit = storeImage(leftImageLwuit, prefix + "Left"); rightImageLwuit = storeImage(rightImageLwuit, prefix + "Right"); com.sun.lwuit.plaf.Border b = com.sun.lwuit.plaf.Border.createImageBorder(topImageLwuit, bottomImageLwuit, leftImageLwuit, rightImageLwuit, topLeftLwuit, topRightLwuit, bottomLeftLwuit, bottomRightLwuit, centerLwuit); Hashtable newTheme = new Hashtable(res.getTheme(theme)); for(int i = 0 ; i < applies.getAppliesTo().getModel().getSize() ; i++) { newTheme.put(applies.getAppliesTo().getModel().getElementAt(i), b); } ((DefaultListModel)applies.getAppliesTo().getModel()).removeAllElements(); res.setTheme(theme, newTheme); } private com.sun.lwuit.EncodedImage storeImage(com.sun.lwuit.EncodedImage img, String prefix) { int i = 1; while(res.containsResource(prefix + ":" + i)) { i++; } float ratioWidth = 0; int multiVal = 0; switch(multiImageCombo.getSelectedIndex()) { // Generate RGB Image case 0: res.setImage(prefix + ":" + i, img); return img; // Generate Medium Resolution MultiImage case 1: multiVal = com.sun.lwuit.Display.DENSITY_MEDIUM; ratioWidth = 320; break; // Generate High Resolution MultiImage case 2: ratioWidth = 480; multiVal = com.sun.lwuit.Display.DENSITY_HIGH; break; // Generate Very High Resolution MultiImage case 3: ratioWidth = 720; multiVal = com.sun.lwuit.Display.DENSITY_VERY_HIGH; break; // Generate HD Resolution MultiImage case 4: ratioWidth = 1080; multiVal = com.sun.lwuit.Display.DENSITY_HD; break; } EditableResources.MultiImage multi = new EditableResources.MultiImage(); multi.setDpi(new int[] {multiVal}); multi.setInternalImages(new com.sun.lwuit.EncodedImage[] {img}); if(lowDPI.isSelected()) { float ratio = 240.0f / ratioWidth; int w = Math.max((int)(img.getWidth() * ratio), 1); int h = Math.max((int)(img.getHeight() * ratio), 1); multi = ImageMultiEditor.scaleMultiImage(multiVal, com.sun.lwuit.Display.DENSITY_LOW, w, h, multi); } if(veryLowDPI.isSelected()) { float ratio = 176.0f / ratioWidth; int w = Math.max((int)(img.getWidth() * ratio), 1); int h = Math.max((int)(img.getHeight() * ratio), 1); multi = ImageMultiEditor.scaleMultiImage(multiVal, com.sun.lwuit.Display.DENSITY_VERY_LOW, w, h, multi); } if(mediumDPI.isSelected()) { float ratio = 320.0f / ratioWidth; int w = Math.max((int)(img.getWidth() * ratio), 1); int h = Math.max((int)(img.getHeight() * ratio), 1); multi = ImageMultiEditor.scaleMultiImage(multiVal, com.sun.lwuit.Display.DENSITY_MEDIUM, w, h, multi); } if(highDPI.isSelected()) { float ratio = 480.0f / ratioWidth; int w = Math.max((int)(img.getWidth() * ratio), 1); int h = Math.max((int)(img.getHeight() * ratio), 1); multi = ImageMultiEditor.scaleMultiImage(multiVal, com.sun.lwuit.Display.DENSITY_HIGH, w, h, multi); } if(veryHighDPI.isSelected()) { float ratio = 720.0f / ratioWidth; int w = Math.max((int)(img.getWidth() * ratio), 1); int h = Math.max((int)(img.getHeight() * ratio), 1); multi = ImageMultiEditor.scaleMultiImage(multiVal, com.sun.lwuit.Display.DENSITY_VERY_HIGH, w, h, multi); } if(hdDPI.isSelected()) { float ratio = 1080.0f / ratioWidth; int w = Math.max((int)(img.getWidth() * ratio), 1); int h = Math.max((int)(img.getHeight() * ratio), 1); multi = ImageMultiEditor.scaleMultiImage(multiVal, com.sun.lwuit.Display.DENSITY_HD, w, h, multi); } res.setMultiImage(prefix + ":" + i, multi); return multi.getBest(); } private byte[] toPng(BufferedImage b) { try { ByteArrayOutputStream bo = new ByteArrayOutputStream(); ImageIO.write(b, "png", bo); bo.close(); return bo.toByteArray(); } catch (IOException ex) { ex.printStackTrace(); return null; } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JSpinner bottom; private javax.swing.JSpinner cropBottom; private javax.swing.JSpinner cropLeft; private javax.swing.JSpinner cropRight; private javax.swing.JSpinner cropTop; private javax.swing.JCheckBox hdDPI; private javax.swing.JCheckBox highDPI; private javax.swing.JLabel imageLabel; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSpinner left; private javax.swing.JCheckBox lowDPI; private javax.swing.JCheckBox mediumDPI; private javax.swing.JComboBox multiImageCombo; private javax.swing.JSpinner right; private javax.swing.JSpinner top; private javax.swing.JCheckBox veryHighDPI; private javax.swing.JCheckBox veryLowDPI; private javax.swing.JSpinner zoom; // End of variables declaration//GEN-END:variables private int get(JSpinner s) { return ((Number)s.getValue()).intValue(); } class ImageLabel extends JLabel { public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; // prevent the clipping from applying to the lines Graphics2D another = (Graphics2D)g2d.create(); g2d.scale(get(zoom), get(zoom)); g2d.clipRect(get(cropLeft) + 10, get(cropTop) + 10, getWidth() / get(zoom) - get(cropLeft) - get(cropRight) - 20, getHeight() / get(zoom) - get(cropTop) - get(cropBottom) - 20); BufferedImage img = wiz.getImage(); g2d.drawImage(img, 10, 10, null); another.scale(get(zoom), get(zoom)); another.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); another.drawLine(0, get(top) + 10, getWidth() / get(zoom), get(top) + 10); another.drawLine(0, getHeight() / get(zoom) - get(bottom) - 10, getWidth() / get(zoom), getHeight() / get(zoom) - get(bottom) - 10); another.drawLine(get(left) + 10, 0, get(left) + 10, getHeight() / get(zoom)); another.drawLine(getWidth() / get(zoom) - get(right) - 10, 0, getWidth() / get(zoom) - get(right) - 10, getHeight() / get(zoom)); another.dispose(); } public Dimension getPreferredSize() { if(wiz == null) { return new Dimension(300, 300); } BufferedImage img = wiz.getImage(); return new Dimension((20 + img.getWidth(this)) * get(zoom), (20 + img.getHeight(this)) * get(zoom)); } } }