Quick Select - Background Removal Tips Needed

Hi -
I've got a background removal that is difficult with white on white. I'm ending up with jagged edges and white coming through in the hair.  I'm wondering if anyone has any times or video's they might recommend to help?
I'm looking for suggestions.
Thanks
Jerry

this looks tough if this is your highest resolution image. the lack of detail, especially around the hair will make this tricky. the jagged edges are probably a symptom of not having enough resolution. does it improve if you feather your edge by a pixel or two? one thing you could try, which may or may not help in creating your mask would be to add contrast to the image so you can better see the edge.
take a look at these two videos from a while back for masking technique.
A Bad Hair Day | Adobe Evangelists - Russell Brown | Adobe TV
http://tv.adobe.com/watch/adobe-evangelists-russell-brown/masking-basics-in-photoshop-cs5/

Similar Messages

  • Preview: Alpha Select (background removal) - not working for me

    The help says "choose Instant Alpha from the Select pop-up menu"
    I see Select in the toolbar with a pulldown arrow, but clicking it does nothing. The only select I have on the previewed image is a scalable box...
    I'm stumped, I can't seem to find out how to get the background removal working in the new Preview.

    Click the button for a short while, a drop-down list should appear. Select the Magic Wand Icon and your Pointer should change to crosshairs. Click and drag to control the colour-difference to be converted to Alpha.
    Once you have selected all the sections you want to convert, press Return or Enter; Voila!

  • Quick Selection Inquiry

    On my original image, I quick select a part of the image (sky).  I then change the hue/saturation to give the image a better effect.  Once I've done this, I add on a new layer and quick select the sky to now change the levels.  Then I'll add on a new layer, quick select the sky again, to do another effect on the sky.  My question is, do you have to quick select every time you need to make a new adjustment of some kind?  I'm sure there's a way to get around this (probably has something to do with the mask in the layers?).  When I'm quick selecting something that's intricate and takes a long time to do the way I'm going about things is very redundant.  Thanks for your help!!

    Your on the right track. A selection can be saved as a mask, an alpha channel or moving/copying to a new layer. Which one you choose depends on the project and what your use to using.

  • Change the background with a bunch of kids? Quirky quick selection tool?

    Main Objective:  How can I change the background behind a bunch of kids? My quick selection tool is quirky! Like the HS kids in the pic….
    The 2nd photo is what I am looking to do.
    When I try the quick selection tool, it's all wonky & quirky now.  I can't select little bits any more! It just basically takes the whole stinkin' page! What did I do?!  Are there defaults?
    On watched video number 85 today, I tried to use my stylus and the bamboo pad. (Good grief; that's another story...it moves & I'm not even touching the pad; what's up with that?! Way too confusing, so I gave up!)
    Anyway..this is what I need.
    What is easier for me to remove the background?  The kids?  Pretend I didn't say yes to help with this project?
    All the video tutorials on how to remove backgrounds is always on a perfect object...not a real life mess of a class.  So... HELP!!!
    Please.
    This is WAY over my head; but I'm trying. Really.
    On a mac with CC membership.

    You may find it easier to select the kids than the background. Instead of copying to new layer, create a mask, then you can add or remove as you like.
    In the top tool bar click the icon in the middle to add to selection. Then use your option key to remove.
    When you are nearing done, you can then refine the mask. If necessary you can use the other selection tool for straight lines, large areas etc. For tight places you may prefer to use the quick mask tool (lowercase q)
    Take your time, you will get it. And like I said, using a mask will let you take a breather. It can help walking away for a bit.

  • Can I resize a Quick Selected image so it fits when I cut and paste it on a different background.

    Can I resize a Quick Selected image so it fits when I cut and paste it on a new background? I am trying to take a photo of someone and place it on a different background. The Quick Selected image is too big when I paste it on the background. You can only see a small portion of the persons head.

    Open the photo, then go to Image>resize>image size. Read what the resolution is in px/in.
    Get out of this screen. Then use one of the selection tools to select the person, go to Edit>copy to put it on the clipboard
    Now, go to File>new>blank file. Enter width & height, and the same resolution value.
    Go to Edit>paste. The person will be on a separate layer. Use the move tool to position, and, to resize with the corner handles, if necessary
    Note: For printing, it is desirable to have the resolution in the 240-300px/in range. For web work, 72 px/in is ok

  • Quick Selection messing up!! NEED HELP!!

    On the quick selection tool when i click on the photo it just lags for a second then does everything by itself and not what I want!!

    Try clicking once and releasing the mouse. Then click to add more bits. If you select too much hold down Alt and the cursor changes from plus to minus. So you can keep fine tuning as you go along.

  • JTree custom renderer setting selection background color problem

    Hi,
    I have a JTree with a custom icon renderer that displays an icon. The JTree is part of a TreeTable component. Iam having a problem setting the selection background uniformly for the entire row. There is no problem when there is no row selected in the JTable.
    My present code looks like this:
    Iam overriding paint in my renderer which extends DefaultCellRenderer.
           super.paint(g);
            Color bColor = null;
            if(!m_selected) {
                 if(currRow % 2 == 0) {
                      bColor = Color.WHITE;
                 } else {
                                                    bColor = backColor;
            } else {
                 bColor = table.getSelectionBackground();                  bColor = getRowSelectionColor();
         if(bColor != null) {
                           g.setColor(bColor);
             if(!m_selected) {
                   g.setXORMode(new Color(0xFF, 0xFF, 0xFF));
             } else {
                 g.setXORMode(new Color(0x00, 0x00, 0x00));
                  I have a color I arrive at using some algorithm that I want using method getRowSelectionColor(). The other cells in the row have this color. But the cell containing the tree node shows different color. Iam not able to arrive at the right combination of the color to set and the xor color so my tree node also looks like the other cells in the row.
    It is not a problem really as the table still looks good. Its just that the tree node looks like it has been highlighted and this might cause a problem when a table cell is highlighed later on in the application ( two cells in the row would be highlighted causing confusion).
    Any help would be appreciated.
    Regards,
    vidyut

    Hi Camickr,
    Thanks for the reply. Iam sorry I didn't include the sources the first time around. There were too many of them. I have created a small, self-contained, compilable program that demonstrates the problem and including it herewith. Still there's quite many files but they are all needed Iam afraid. The only one you will have to concern yourself fior this problem is the file IconRenderer.java. The treenode background and the other cells background are not in sync when table row is not selected in this example though. But they are in my real program. I just need them to be in sync i.e have the same background color when the row is selected.
    Your help would be very much appreciated.
    These are the files that are included below:
    1. AbstractTreeTableModel.java
    2. Bookmarks.java
    3. BookmarksModel.java
    4. DynamicTreeTableModel.java
    5. IconRenderer.java
    6. IndicatorRenderer.java
    7. JTreeTable.java
    8. TreeTableExample3.java (contains main)
    9. TreeTableModel.java
    10. TreeTableModelAdapter.java
    The copyright and javadocs information has been stripped for clarity.
    cheers,
    vidyut
    // AbstractTreeTableModel.java BEGIN
    import javax.swing.tree.*;
    import javax.swing.event.*;
    public abstract class AbstractTreeTableModel implements TreeTableModel {
        protected Object root;    
        protected EventListenerList listenerList = new EventListenerList();
        public AbstractTreeTableModel(Object root) {
            this.root = root;
        // Default implementations for methods in the TreeModel interface.
        public Object getRoot() {
            return root;
        public boolean isLeaf(Object node) {
            return getChildCount(node) == 0;
        public void valueForPathChanged(TreePath path, Object newValue) {}
        // This is not called in the JTree's default mode:
        // use a naive implementation.
        public int getIndexOfChild(Object parent, Object child) {
            for (int i = 0; i < getChildCount(parent); i++) {
             if (getChild(parent, i).equals(child)) {
                 return i;
         return -1;
        public void addTreeModelListener(TreeModelListener l) {
            listenerList.add(TreeModelListener.class, l);
        public void removeTreeModelListener(TreeModelListener l) {
            listenerList.remove(TreeModelListener.class, l);
        protected void fireTreeNodesChanged(Object source, Object[] path,
                                            int[] childIndices,
                                            Object[] children) {
            // Guaranteed to return a non-null array
            Object[] listeners = listenerList.getListenerList();
            TreeModelEvent e = null;
            // Process the listeners last to first, notifying
            // those that are interested in this event
            for (int i = listeners.length-2; i>=0; i-=2) {
                if (listeners==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
    protected void fireTreeNodesInserted(Object source, Object[] path,
    int[] childIndices,
    Object[] children) {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    TreeModelEvent e = null;
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
    if (listeners[i]==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
    protected void fireTreeNodesRemoved(Object source, Object[] path,
    int[] childIndices,
    Object[] children) {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    TreeModelEvent e = null;
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
    if (listeners[i]==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
    protected void fireTreeStructureChanged(Object source, Object[] path,
    int[] childIndices,
    Object[] children) {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    TreeModelEvent e = null;
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
    if (listeners[i]==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeStructureChanged(e);
    // Default impelmentations for methods in the TreeTableModel interface.
    public Class getColumnClass(int column) { return Object.class; }
    public boolean isCellEditable(Object node, int column) {
    return getColumnClass(column) == TreeTableModel.class;
    public void setValueAt(Object aValue, Object node, int column) {}
    // Left to be implemented in the subclass:
    * public Object getChild(Object parent, int index)
    * public int getChildCount(Object parent)
    * public int getColumnCount()
    * public String getColumnName(Object node, int column)
    * public Object getValueAt(Object node, int column)
    // AbstractTreeTableModel.java END
    // Bookmarks.java BEGIN
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.text.*;
    import javax.swing.text.html.*;
    import javax.swing.text.html.parser.*;
    public class Bookmarks {
    /** The root node the bookmarks are added to. */
    private BookmarkDirectory root;
    * Creates a new Bookmarks object, with the entries coming from
    * <code>path</code>.
    public Bookmarks(String path) {
         root = new BookmarkDirectory("Bookmarks");
         if (path != null) {
         parse(path);
    * Returns the root of the bookmarks.
    public BookmarkDirectory getRoot() {
         return root;
    protected void parse(String path) {
         try {
         BufferedReader reader = new BufferedReader(new FileReader
                                       (path));
         new ParserDelegator().parse(reader, new CallbackHandler(), true);
         catch (IOException ioe) {
         System.out.println("IOE: " + ioe);
         JOptionPane.showMessageDialog(null, "Load Bookmarks",
                             "Unable to load bookmarks",
                             JOptionPane.ERROR_MESSAGE);
    private static final short NO_ENTRY = 0;
    private static final short BOOKMARK_ENTRY = 2;
    private static final short DIRECTORY_ENTRY = 3;
    private class CallbackHandler extends HTMLEditorKit.ParserCallback {
         /** Parent node that new entries are added to. */
         private BookmarkDirectory parent;
         /** The most recently parsed tag. */
         private HTML.Tag tag;
         /** The last tag encountered. */
         private HTML.Tag lastTag;
         * The state, will be one of NO_ENTRY, DIRECTORY_ENTRY,
    * or BOOKMARK_ENTRY.
         private short state;
         * Date for the next BookmarkDirectory node.
         private Date parentDate;
         * The values from the attributes are placed in here. When the
         * text is encountered this is added to the node hierarchy and a
    * new instance is created.
         private BookmarkEntry lastBookmark;
         * Creates the CallbackHandler.
         public CallbackHandler() {
         parent = root;
         lastBookmark = new BookmarkEntry();
         // HTMLEditorKit.ParserCallback methods
         * Invoked when text in the html document is encountered. Based on
         * the current state, this will either: do nothing
    * (state == NO_ENTRY),
         * create a new BookmarkEntry (state == BOOKMARK_ENTRY) or
    * create a new
         * BookmarkDirectory (state == DIRECTORY_ENTRY). If state is
    * != NO_ENTRY, it is reset to NO_ENTRY after this is
    * invoked.
    public void handleText(char[] data, int pos) {
         switch (state) {
         case NO_ENTRY:
              break;
         case BOOKMARK_ENTRY:
              // URL.
              lastBookmark.setName(new String(data));
    parent.add(lastBookmark);
    lastBookmark = new BookmarkEntry();
              break;
         case DIRECTORY_ENTRY:
              // directory.
              BookmarkDirectory newParent = new
                   BookmarkDirectory(new String(data));
              newParent.setCreated(parentDate);
              parent.add(newParent);
              parent = newParent;
              break;
         default:
              break;
    state = NO_ENTRY;
         * Invoked when a start tag is encountered. Based on the tag
         * this may update the BookmarkEntry and state, or update the
         * parentDate.
         public void handleStartTag(HTML.Tag t, MutableAttributeSet a,
                        int pos) {
         lastTag = tag;
         tag = t;
         if (t == HTML.Tag.A && lastTag == HTML.Tag.DT) {
    long lDate;
              // URL
              URL url;
              try {
              url = new URL((String)a.getAttribute(HTML.Attribute.HREF));
              } catch (MalformedURLException murle) {
              url = null;
              lastBookmark.setLocation(url);
              // created
              Date date;
              try {
    lDate = Long.parseLong((String)a.getAttribute("add_date"));
    if (lDate != 0l) {
    date = new Date(1000l * lDate);
    else {
    date = null;
              } catch (Exception ex) {
              date = null;
              lastBookmark.setCreated(date);
              // last visited
              try {
    lDate = Long.parseLong((String)a.
    getAttribute("last_visit"));
    if (lDate != 0l) {
    date = new Date(1000l * lDate);
    else {
    date = null;
              } catch (Exception ex) {
              date = null;
              lastBookmark.setLastVisited(date);
              state = BOOKMARK_ENTRY;
         else if (t == HTML.Tag.H3 && lastTag == HTML.Tag.DT) {
              // new node.
              try {
              parentDate = new Date(1000l * Long.parseLong((String)a.
                                  getAttribute("add_date")));
              } catch (Exception ex) {
              parentDate = null;
              state = DIRECTORY_ENTRY;
         * Invoked when the end of a tag is encountered. If the tag is
         * a DL, this will set the node that parents are added to the current
         * nodes parent.
         public void handleEndTag(HTML.Tag t, int pos) {
         if (t == HTML.Tag.DL && parent != null) {
              parent = (BookmarkDirectory)parent.getParent();
    public static class BookmarkDirectory extends DefaultMutableTreeNode {
         /** Dates created. */
         private Date created;
         public BookmarkDirectory(String name) {
         super(name);
         public void setName(String name) {
         setUserObject(name);
         public String getName() {
         return (String)getUserObject();
         public void setCreated(Date date) {
         this.created = date;
         public Date getCreated() {
         return created;
    public static class BookmarkEntry extends DefaultMutableTreeNode {
         /** User description of the string. */
         private String name;
         /** The URL the bookmark represents. */
         private URL location;
         /** Dates the URL was last visited. */
         private Date lastVisited;
         /** Date the URL was created. */
         private Date created;
         public void setName(String name) {
         this.name = name;
         public String getName() {
         return name;
         public void setLocation(URL location) {
         this.location = location;
         public URL getLocation() {
         return location;
         public void setLastVisited(Date date) {
         lastVisited = date;
         public Date getLastVisited() {
         return lastVisited;
         public void setCreated(Date date) {
         this.created = date;
         public Date getCreated() {
         return created;
         public String toString() {
         return getName();
    // Bookmarks.java END
    // BookmarksModel.java BEGIN
    import java.util.Date;
    public class BookmarksModel extends DynamicTreeTableModel {
    * Names of the columns.
    private static final String[] columnNames =
    { "Name", "Location", "Last Visited", "Created" };
    * Method names used to access the data to display.
    private static final String[] methodNames =
    { "getName", "getLocation", "getLastVisited","getCreated" };
    * Method names used to set the data.
    private static final String[] setterMethodNames =
    { "setName", "setLocation", "setLastVisited","setCreated" };
    private static final Class[] classes =
    { TreeTableModel.class, String.class, Date.class, Date.class };
    public BookmarksModel(Bookmarks.BookmarkDirectory root) {
         super(root, columnNames, methodNames, setterMethodNames, classes);
    public boolean isCellEditable(Object node, int column) {
         switch (column) {
         case 0:
         // Allow editing of the name, as long as not the root.
         return (node != getRoot());
         case 1:
         // Allow editing of the location, as long as not a
         // directory
         return (node instanceof Bookmarks.BookmarkEntry);
         default:
         // Don't allow editing of the date fields.
         return false;
    // BookmarksModel.java END
    // DynamicTreeTableModel.java BEGIN
    import java.lang.reflect.*;
    import javax.swing.tree.*;
    public class DynamicTreeTableModel extends AbstractTreeTableModel {
    /** Names of the columns, used for the TableModel getColumnName method. */
    private String[] columnNames;
    private String[] methodNames;
    private String[] setterMethodNames;
    /** Column classes, used for the TableModel method getColumnClass. */
    private Class[] cTypes;
    public DynamicTreeTableModel(TreeNode root, String[] columnNames,
                        String[] getterMethodNames,
                        String[] setterMethodNames,
                        Class[] cTypes) {
         super(root);
         this.columnNames = columnNames;
         this.methodNames = getterMethodNames;
         this.setterMethodNames = setterMethodNames;
         this.cTypes = cTypes;
    public int getChildCount(Object node) {
         return ((TreeNode)node).getChildCount();
    public Object getChild(Object node, int i) {
         return ((TreeNode)node).getChildAt(i);
    public boolean isLeaf(Object node) {
         return ((TreeNode)node).isLeaf();
    public int getColumnCount() {
         return columnNames.length;
    public String getColumnName(int column) {
         if (cTypes == null || column < 0 || column >= cTypes.length) {
         return null;
         return columnNames[column];
    public Class getColumnClass(int column) {
         if (cTypes == null || column < 0 || column >= cTypes.length) {
         return null;
         return cTypes[column];
    public Object getValueAt(Object node, int column) {
         try {
         Method method = node.getClass().getMethod(methodNames[column],
                                  null);
         if (method != null) {
              return method.invoke(node, null);
         catch (Throwable th) {}
         return null;
    * Returns true if there is a setter method name for column
    * <code>column</code>. This is set in the constructor.
    public boolean isCellEditable(Object node, int column) {
    return (setterMethodNames != null &&
         setterMethodNames[column] != null);
    // Note: This looks up the methods each time! This is rather inefficient;
    // it should really be changed to cache matching
    // methods/constructors
    // based on <code>node</code>'s class, and code>aValue</code>'s
    //class.
    public void setValueAt(Object aValue, Object node, int column) {
         boolean found = false;
         try {
         // We have to search through all the methods since the
         // types may not match up.
         Method[] methods = node.getClass().getMethods();
         for (int counter = methods.length - 1; counter >= 0; counter--) {
              if (methods[counter].getName().equals
              (setterMethodNames[column]) && methods[counter].
              getParameterTypes() != null && methods[counter].
              getParameterTypes().length == 1) {
              // We found a matching method
              Class param = methods[counter].getParameterTypes()[0];
              if (!param.isInstance(aValue)) {
                   // Yes, we can use the value passed in directly,
                   // no coercision is necessary!
                   if (aValue instanceof String &&
                   ((String)aValue).length() == 0) {
                   // Assume an empty string is null, this is
                   // probably bogus for here.
                   aValue = null;
                   else {
                   // Have to attempt some sort of coercision.
                   // See if the expected parameter type has
                   // a constructor that takes a String.
                   Constructor cs = param.getConstructor
                   (new Class[] { String.class });
                   if (cs != null) {
                        aValue = cs.newInstance(new Object[]
                                       { aValue });
                   else {
                        aValue = null;
              // null either means it was an empty string, or there
              // was no translation. Could potentially deal with these
              // differently.
              methods[counter].invoke(node, new Object[] { aValue });
              found = true;
              break;
         } catch (Throwable th) {
         System.out.println("exception: " + th);
         if (found) {
         // The value changed, fire an event to notify listeners.
         TreeNode parent = ((TreeNode)node).getParent();
         fireTreeNodesChanged(this, getPathToRoot(parent),
                        new int[] { getIndexOfChild(parent, node) },
                        new Object[] { node });
    public TreeNode[] getPathToRoot(TreeNode aNode) {
    return getPathToRoot(aNode, 0);
    private TreeNode[] getPathToRoot(TreeNode aNode, int depth) {
    TreeNode[] retNodes;
         // This method recurses, traversing towards the root in order
         // size the array. On the way back, it fills in the nodes,
         // starting from the root and working back to the original node.
    /* Check for null, in case someone passed in a null node, or
    they passed in an element that isn't rooted at root. */
    if(aNode == null) {
    if(depth == 0)
    return null;
    else
    retNodes = new TreeNode[depth];
    else {
    depth++;
    if(aNode == root)
    retNodes = new TreeNode[depth];
    else
    retNodes = getPathToRoot(aNode.getParent(), depth);
    retNodes[retNodes.length - depth] = aNode;
    return retNodes;
    // DynamicTreeTableModel.java END
    // IconRenderer.java BEGIN
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.plaf.basic.BasicTreeUI;
    class IconRenderer extends DefaultTreeCellRenderer
    // Color backColor = new Color(0xD0, 0xCC, 0xFF);
    Color backColor = new Color(0xF0, 0xF0, 0xE0);
    String tipText = "";
    JTree tree;
    int currRow = 0;
    boolean m_selected;
    JTable table;
    public IconRenderer(JTree tree, JTable table) {
    this.table = table;
    // setBackground(backColor);
    setBackground(Color.GREEN);
    setForeground(Color.black);
         this.tree = tree;
    public Component getTreeCellRendererComponent(JTree tree, Object value,
    boolean selected,
    boolean expanded, boolean leaf,
    int row, boolean hasFocus) {
         Object node = null;
         super.getTreeCellRendererComponent(
    tree, value, selected,
    expanded, leaf, row,
    hasFocus);
         TreePath treePath = tree.getPathForRow(row);
    if(treePath != null)
              node = treePath.getLastPathComponent();
    currRow = row;
    m_selected = selected;
    DefaultMutableTreeNode itc = null;
    if (node instanceof DefaultMutableTreeNode) {
    itc = (DefaultMutableTreeNode)node;
         setClosedIcon(closedIcon);
    setOpenIcon(openIcon);
    return this;
    /* Override the default to send back different strings for folders and leaves. */
    public String getToolTipText() {
    return tipText;
    * Paints the value. The background is filled based on selected.
    public void paint(Graphics g) {
         super.paint(g);
         Color bColor = null;
         if(!m_selected) {
              System.out.println(" iconren not sel currRow " + currRow);
              if(currRow % 2 == 0) {
                   bColor = Color.WHITE;
              } else {
              bColor = backColor;
         } else {
              bColor = table.getSelectionBackground();
              System.out.println("in else selbg = " + bColor);           
              bColor = new Color(0xF0, 0xCC, 0x92);
              System.out.println(" bColor aft = " + bColor);           
         int imageOffset = -1;
         if(bColor != null) {
         imageOffset = getLabelStart();
         g.setColor(bColor);
         if(!m_selected) {
              System.out.println(" not sel setting white ");
              g.setXORMode(new Color(0xFF, 0xFF, 0xFF));
         } else {
    //          g.setXORMode(new Color(0xCC, 0xCC, 0x9F));
              g.setXORMode(new Color(0x00, 0x00, 0x00));
              System.out.println(" using color = " + g.getColor());           
         if(getComponentOrientation().isLeftToRight()) {
         g.fillRect(imageOffset, 0, getWidth() - 1 - imageOffset,
                   getHeight());
         } else {
         g.fillRect(0, 0, getWidth() - 1 - imageOffset,
                   getHeight());
    private int getLabelStart() {
         Icon currentI = getIcon();
         if(currentI != null && getText() != null) {
         return currentI.getIconWidth() + Math.max(0, getIconTextGap() - 1);
         return 0;
    // IconRenderer.java END
    // IndicatorRenderer.java BEGIN
    // import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    import javax.swing.table.*;
    import javax.swing.table.*;
    import javax.swing.plaf.basic.*;
    import java.awt.event.*;
    import java.util.EventObject;
    import java.text.NumberFormat;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.StringTokenizer;
    import java.util.Arrays;
    class IndicatorRenderer extends DefaultTableCellRenderer {
    /** Makes sure the number of displayed in an internationalized
    * manner. */
    protected NumberFormat formatter;
    /** Row that is currently being painted. */
    protected int lastRow;
    protected int reloadRow;
    protected int reloadCounter;
    protected TreeTableModel treeTableModel;
    protected TreeTableModelAdapter treeTblAdapter;
    protected JTable table;
    Component renderer = null;
    Color backColor = new Color(0xF0, 0xF0, 0xE0);
    IndicatorRenderer(TreeTableModelAdapter treeTblAdapter, TreeTableModel treeTableModel) {
         setHorizontalAlignment(JLabel.RIGHT);
         setFont(new Font("serif", Font.BOLD, 12));
         this.treeTableModel = treeTableModel;
         this.treeTblAdapter = treeTblAdapter;
    * Invoked as part of DefaultTableCellRenderers implemention. Sets
    * the text of the label.
    public void setValue(Object value) {
    /* setText((value == null) ? "---" : formatter.format(value)); */
         setText((value == null) ? "---" : (String) value.toString());
    * Returns this.
    public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus,
    int row, int column) {
         renderer = super.getTableCellRendererComponent(table, value, isSelected,
    hasFocus, row, column);
         lastRow = row;
         this.table = table;
              if(isSelected) {
                   doMask(hasFocus, isSelected);
              } else
              setBackground(table.getBackground());
    return renderer;
    * If the row being painted is also being reloaded this will draw
    * a little indicator.
    public void paint(Graphics g) {
         super.paint(g);
    private void doMask(boolean hasFocus, boolean selected) {
              maskBackground(hasFocus, selected);
    private void maskBackground(boolean hasFocus, boolean selected) {
              Color seed = null;
              seed = table.getSelectionBackground();
              Color color = seed;
              if (color != null) {
                   setBackground(
    new Color(0xF0, 0xCC, 0x92));
    // IndicatorRenderer.java END
    // JTreeTable.java BEGIN
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    import javax.swing.table.*;
    import java.awt.event.*;
    import java.util.EventObject;
    public class JTreeTable extends JTable {
    /** A subclass of JTree. */
    protected TreeTableCellRenderer tree;
    protected IndicatorRenderer indicatorRenderer = null;
    public JTreeTable(TreeTableModel treeTableModel) {
         super();
         // Creates the tree. It will be used as a renderer and editor.
         tree = new TreeTableCellRenderer(treeTableModel);
         TreeTableModelAdapter tdap = new TreeTableModelAdapter(treeTableModel, tree);
         // Installs a tableModel representing the visible rows in the tree.
         super.setModel(tdap);
         // Forces the JTable and JTree to share their row selection models.
         ListToTreeSelectionModelWrapper selectionWrapper = new
         ListToTreeSelectionModelWrapper();
         tree.setSelectionModel(selectionWrapper);
         setSelectionModel(selectionWrapper.getListSelectionModel());
         // Installs the tree editor renderer and editor.
         setDefaultRenderer(TreeTableModel.class, tree);
         setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
         indicatorRenderer = new IndicatorRenderer(tdap, treeTableModel);     
         // No grid.
         setShowGrid(false);
         // No intercell spacing
         setIntercellSpacing(new Dimension(0, 0));     
         // And update the height of the trees row to match that of
         // the table.
         //if (tree.getRowHeight() < 1) {
         // Metal looks better like this.
         setRowHeight(20);
    public TableCellRenderer getCellRenderer(int row, int col) {
              if(col == 0)
              return tree;
              else
              return indicatorRenderer;     
    public void updateUI() {
         super.updateUI();
         if(tree != null) {
         tree.updateUI();
         // Do this so that the editor is referencing the current renderer
         // from the tree. The renderer can potentially change each time
         // laf changes.
         setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
         // Use the tree's default foreground and background colors in the
         // table.
    LookAndFeel.installColorsAndFont(this, "Tree.background",
    "Tree.foreground", "Tree.font");
    public int getEditingRow() {
    return (getColumnClass(editingColumn) == TreeTableModel.class) ? -1 :
         editingRow;
    private int realEditingRow() {
         return editingRow;
    public void sizeColumnsToFit(int resizingColumn) {
         super.sizeColumnsToFit(resizingColumn);
         if (getEditingColumn() != -1 && getColumnClass(editingColumn) ==
         TreeTableModel.class) {
         Rectangle cellRect = getCellRect(realEditingRow(),
                             getEditingColumn(), false);
    Component component = getEditorComponent();
         component.setBounds(cellRect);
    component.validate();
    public void setRowHeight(int rowHeight) {
    super.setRowHeight(rowHeight);
         if (tree != null && tree.getRowHeight() != rowHeight) {
    tree.setRowHeight(getRowHeight());
    public JTree getTree() {
         return tree;
    public boolean editCellAt(int row, int column, EventObject e){
         boolean retValue = super.editCellAt(row, column, e);
         if (retValue && getColumnClass(column) == TreeTableModel.class) {
         repaint(getCellRect(row, column, false));
         return retValue;
    public class TreeTableCellRenderer extends JTree implements
         TableCellRenderer {
         /** Last table/tree row asked to renderer. */
         protected int visibleRow;
         /** Border to draw around the tree, if this is non-null, it will
         * be painted. */
         protected Border highlightBorder;
         public TreeTableCellRenderer(Tr

  • When I use the quick selection tool in Photoshop CS6 my monitor flickers

    When I use the quick selection tool my monitor starts flickering what do I need to change in my set up.

    I'm sorry Jeff I know better.  I'm using Adobe CS6 and running Window 8.0 operating system. Thanks for your help. I also run Adobe photoshop element 11 on the same system with no problems
    <Removed by Moderator>

  • Quick Selection Refine Edge Problem

    Using CC 2014.2.2, and the Quick Selection tool, when I go to Refine Edge the Refine Radius Tool/Erase Refinements Tool
    is grayed out.  When this is clicked, and the cursor moved to the selection, what shows is a slashed circle.  (The universal
    sign for "No").
    I've tried various views, settings, and layer arrangements, and changed the bit from 16 to 32 to 8, and nothing seems to allow
    those tools to be used.  I've also reset the Quick Selection tool.
    Screenshot of image, but the slashed circle will not stay in place for a screenshot:
    Dropbox - 2015-03-12SS.jpg

    You have View set to Marching Ants.  I think every other option will allow the use of the brush.
    A couple of tips:
    Any amount of Smoothing will prevent Refine Edge of selecting individual strands of hair.  Negative values of Shift edge will have the same effect.  If you think about it — if a hair is two pixels wide, and you set Shift edge to -4 the hair has gone.
    Try setting View to Black, uncheck Show Original, switching in and out of Show radius.  This will show if your radius extends far enough, but equally important, shows if you have painted 'into' the image.  This can cause the annoying softening of edges.
    Don't use Decontaminate colours until you have the other settings working well.  I don't think I have ever needed to use such a high setting for it.
    One problem with having Remember settings checked, is that it can overwrite useful defaults.  For instance, checking Decontaminate colors switches the output to New layer with layer mask, and that is really useful as it allows you to clean up the selection manually.
    Refine Edge was a real game changer, and dramatically speeded up the selection process.  Unfortunately, I don't think it was anything like as intuitive as Adobe would have us believe, and nor have any of the tutorials I've seen really and truly got a grip on it.  The Martin Evening tutorial maybe comes close.

  • Quick selection tool - counture left when deleting

    When I use the quick selection tool to remove something, I am always left with a shadow counture of the area that I want to get rid of. I guess I have to make another kind of setting or something, but I cannot find any that works.
    Photoshop CS6 W7
    Thanks in advance!
    /Håkan

    Hi everybody, thanks for your help.
    I will try to find the "Refine edge dialog" (I have a swedish version, so I first have to find what it is called in swedish...:) )
    I have enclosed a screen shot as requested. This is how I have done:
    I made a selection on the picture
    Cut and then paste in same picture in new layer.
    Removed the shirt and the surrounding white background
    And - left is only the arm BUT also the countours of the shirt...
    Hope this can be solved by you!
    Thanks in advance,
    Håkan

  • Quick Selection Brush Tool

    I have been trying to follow a fascinating earlier thread about changing the
    background of an image. In news:[email protected] , Bob
    Warren wrote, "I refined that somewhat again with the selection brush." I
    looked this up in Help, where I was confronted with
    Quick Selection Brush tool options
    A. Quick Selection tool
    B. Selection Brush tool
    In the Editor, select the Quick Selection Brush tool...
    and on the next page,
    In the Editor, select the Selection Brush tool from the toolbox. You may
    need to click the Quick Selection Brush tool in the toolbox and select the
    Selection Brush from the list of hidden tools that appears.
    What is the difference between a Selection Brush, a Selection Brush tool, a
    Quick Selection tool and a Quick Selection Brush tool? And which one should
    I be using to "refine" a selection?
    Noel

    The quick selection tool and the selection brush are grouped together as a subset of the same tool in the toolbox. By default it shows the Quick selection tool. The sentence means that you will see the quick selection tool in the toolbox. To get to the (non-quick) selection brush, you must click the quick selection tool and choose the regular selection brush from the flyout menu.

  • Using Refine edge with Quick Selection......

    I think I'm doing something wrong, because I can do a quick selection, but when I hit the "Refine Edge" button and make a change to the selection, my change doesn't "take"...
    I have an image, one layer (background), absolutely normal, boring image (for example, a white swan sitting in the blue water).  I go in with Quick Select and select PART OF
    the swan.  I have areas that aren't selected, and areas that are selected and shouldn't be.  So, I need to refine my selection.  I subtract and add bits of selection with the
    Quick Select tool, but leave a big piece of the swan's body NOT selected, and a bit of water SELECTED.  So, I need to go in with a tool and refine the edge of my selection...
    SO, I hit "Refine Edge" from the tool bar and select "Overlay" for my view mode.  I can now see what's selected, and know what I'd like to change.  And, I have a red overlay
    so I have a visual guide to changing things....
    Go to the "Refine Radius Tool" and paint over an area I want ADDED to my selection (a piece of swan immediately adjacent to my original selection)...  It runs red, like I'd expect. 
    I release the mouse and a second later, the red goes away, but the selection has NOT been changed.  I've tried this directly from the Quick Select tool.  I've double-clicked the
    background layer and changed it so it's not background any more - made no difference.  I've created a layer mask on the no-longer background layer (the mask contains my
    Quick Selection just fine).  I've then used the Mask panel to specify "Mask Edge" and again tried the "Refine Radius Tool" to add an area to my selection.  Again, it turns red
    while selecting, then stops being red when I let go, and the area I selected is NOT added to the selection...
    I watched a presentation by a Photoshop person who DEMONSTRATED exactly what I'm doing, and it worked.  I looked at Martin Evening's CS5 book, and as near as I can tell,
    I did exactly what he described...  He got a selection, added to the selection, and it worked fine... 
    I figure I've got something configured wrong, or something else goofed up.  What am I missing here? 

    It's not my intention (intent?) to beat up on the "Refine Edge".  I figured when I couldn't get the same pristine results as all the demos that I was doing something wrong, and kept watching more people doing this 'cause I figured I was doing something dumb...
    Mostly, I've been trying this on different images over the last couple weeks just to see if I could figure out how to get it to work.
    From the responses in here I suspect I'm doing it correctly, but the images I'm trying it on just don't lend themselves to perfect edges without some additional work.....  The Quick Select and a bit of edge cleanup is still faster than the "good old days", so its definitely a step forward. 
    As far as the swans, yes, no matter what I did, I was getting a lot of extraneous selections and wonky edges and stuff.  One of these days I'll try pulling an eagle or a great egret out of a clear sky and see how that goes.  I suspect it'll work a lot better... 
    I only fiddled with the rodeo image 'cause I figured it was "like" hair.  But my background is pretty busy.  With a little additional work I DID get a very, very good selection, and was able to soften the background, and do a gradient so the ground under the horse is sharp, gradually blurring as it moves to the grandstands... 
    Thanks for all the replies...

  • I would like cut out an object using the quick select tool and drop the object into another picture. Can anyone help

    I am using background pictures and want to cut out objects from other jpegs using the quick select tool and drop them into the background picture. So if i have a banana and select the object i need to copy the banana into the other background.
    Hope this makes sense.
    Gary

    Select banana. Right click>layer via copy. Move tool. Click and drag to other file. Drop on image.
    OR: load the background and banana in one stack (File>Scripts>Load File Into Stack). Select banana and layer via copy or create layer mask.
    Benjamin

  • For elements 6 Using the Quick Select Tool- Best Settings

    I would like to hear feedback on best setting using elements 6 for the Quick Select Tool- Trying to remove a background for a Product Image. 
    Thanks!

    Perhaps you could post your sample image here to get informed suggestions.
    There are many ways to delete the backgrounds but they all depend on the type and complexity of the photo.
    Good luck.

  • When the apple review team review our app,they point out that our  app uses a background mode but does not include functionality that requires that mode to run persistently.but in fact,when the app in background ,the app need data update to make the

    when the apple review team review our app,they point out that our  app uses a background mode but does not include functionality that requires that mode to run persistently。but in fact,when the app in background ,the app need data update to make the function of  trajectory replay come ture。in fact, we have added function when the app  is in background mode。we have point out the point to them by email。but they still have question on the background mode,we are confused,does anyone can help me,i still don't know why do review team can't find the data update when  the app is in background and how do i modify the app,or what is the really problem they refered,do i misunderstand them?
    the blow is the content of the review team email:
    We found that your app uses a background mode but does not include functionality that requires that mode to run persistently. This behavior is not in compliance with the App Store Review Guidelines.
    We noticed your app declares support for location in the UIBackgroundModes key in your Info.plist but does not include features that require persistent location.
    It would be appropriate to add features that require persistent use of real-time location updates while the app is in the background or remove the "location" setting from the UIBackgroundModes key. If your application does not require persistent, real-time location updates, we recommend using the significant-change location service or the region monitoring location service.
    For more information on these options, please see the "Starting the Significant-Change Location Service" and "Monitoring Shape-Based Regions" sections in the Location Awareness Programming Guide.
    If you choose to add features that use the Location Background Mode, please include the following battery use disclaimer in your Application Description:
    "Continued use of GPS running in the background can dramatically decrease battery life."
    Additionally, at your earliest opportunity, please review the following question/s and provide as detailed information as you can in response. The more information you can provide upfront, the sooner we can complete your review.
    We are unable to access the app in use in "http://www.wayding.com/waydingweb/article/12/139". Please provide us a valid demo video to show your app in use.
    For discrete code-level questions, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:
    - complete details of your rejection issue(s)
    - screenshots
    - steps to reproduce the issue(s)
    - symbolicated crash logs - if your issue results in a crash log
    If you have difficulty reproducing a reported issue, please try testing the workflow as described in <https://developer.apple.com/library/ios/qa/qa1764/>Technical Q&A QA1764: How to reproduce a crash or bug that only App Review or users are seeing.

    Unfortunately, these forums here are all user to user; you might try the developer forums or get in touch with the team that you are working with.

Maybe you are looking for

  • // Code Help need .. in Reading CSV file and display the Output.

    Hi All, I am a new Bee in code and started learning code, I have stared with Console application and need your advice and suggestion. I want to write a code which read the input from the CSV file and display the output in console application combinat

  • Using MBA connected to iMac with lid closed

    Just purchased my 11" MBA and its working a great replacement for my 15" MBP, especially for travel. One thing I haven't been able to do yet though is work with the MBA closed while connected to my iMac (like using an external Studio Display). I do t

  • DV6 2113SA Tv out via vga?

    Is it possible to connect a DV6 2113SA to a SD TV via the vga port and a vga to svideo adaptor? I've tried the ATI and HP website and can't find an answer.

  • Acrobat Extended 9 - rh file import compatibility - Right Hemisphere

    Hello, does anyone have an idea how to geht a plugin for importing the rh format in acrobat extended? The file compatibility was in acrobat 8 3d, but after the toolkit (deep exploration) is missing in the 9th version i have troubles importing 3dsmax

  • Calling an EJB deployed in OC4J from a Java Stored Procedure

    Hi all, Well, I've been trying to figure this out for a bit now and haven't come up with a solution. I have a Java Stored Procedure in a 9i database and would like to call an EJB deployed in the OC4J Container but DO NOT want to load the various Orio