[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[news.eclipse.platform.swt] Re: Displaying Image Thumbnails

Hi Steve!

Thanks for your reply. My problem is that I keep getting the out of memory
error. I tried out your snippet and unfortunately I've the same issue again.
No matter whether I touch an image via the Image class or ImageDescriptor
class, I always end up with this error. I try to show a thumbnail for a
quite big image: it's about 1MB size (2806 x 4166  Pixel, 16,7 Million color
24 BitsPerPixel).

Any idea?

Thanks,
Chris


"Steve Northover" <steve_northover@xxxxxxxxxx> schrieb im Newsbeitrag
news:b818dg$ijn$1@xxxxxxxxxxxxxxxx
> Can you try this code out and let me know how you get on?  I'm considering
> add it as a snippet.
> From your post, I can't tell whether you can't scale an image at all, it
is
> too slow or you keep getting
> the out of memory error.  This code just scales the images.
>
> /*
>  * Copyright (c) 2000, 2003 IBM Corp.  All rights reserved.
>  * This file is made available under the terms of the Common Public
License
> v1.0
>  * which accompanies this distribution, and is available at
>  * http://www.eclipse.org/legal/cpl-v10.html
>  */
>
> import org.eclipse.swt.*;
> import org.eclipse.swt.graphics.*;
> import org.eclipse.swt.widgets.*;
> import org.eclipse.swt.layout.*;
> import org.eclipse.swt.custom.*;
>
> import java.io.*;
>
> public class Thumbnail {
> public static void main (String [] args) {
>  final Display display = new Display ();
>  final Shell shell = new Shell (display);
>  Button button = new Button (shell, SWT.PUSH);
>  button.setText ("Load Images ...");
>  final ScrolledComposite sc = new ScrolledComposite (shell, SWT.H_SCROLL |
> SWT.V_SCROLL);
>  final Composite comp = new Composite (sc, SWT.NONE);
>  comp.setLayout (new RowLayout (SWT.VERTICAL));
>  sc.setContent (comp);
>  FormLayout layout = new FormLayout ();
>  FormData scData = new FormData ();
>  scData.left = new FormAttachment (0, 0);
>  scData.right = new FormAttachment (100, 0);
>  scData.top = new FormAttachment (button, 0);
>  scData.bottom = new FormAttachment (100, 0);
>  sc.setLayoutData (scData);
>  shell.setLayout (layout);
>  final String [] path = new String [] {"j:/teamswt/wadman/doc/jdj/part2"};
>  button.addListener (SWT.Selection, new Listener () {
>   public void handleEvent (Event e) {
>    DirectoryDialog dialog = new DirectoryDialog (shell);
>    dialog.setFilterPath (path [0]);
>    if (dialog.open () == null) return;
>    Control [] children = comp.getChildren ();
>    for (int i=0; i<children.length; i++) {
>     children [i].dispose ();
>    }
>    File file = new File (path [0]);
>    File [] files = file.listFiles ();
>    for (int i= 0; i<files.length; i++) {
>     if (!files [i].isDirectory()) {
>      final Image image;
>      try {
>       image = new Image (display, files [i].getAbsolutePath ());
>      } catch (SWTException exception) {
>       continue;
>      }
>      final Composite c = new Composite (comp, SWT.BORDER);
>      Listener listener = new Listener () {
>       public void handleEvent (Event e) {
>        switch (e.type) {
>         case SWT.Dispose: image.dispose (); break;
>         case SWT.Paint: {
>          Rectangle rect = c.getClientArea ();
>          Rectangle bounds = image.getBounds ();
>          int x = 0, y = 0, width = 0, height = 0;
>          if (bounds.width > bounds.height) {
>           width = rect.width;
>           height = bounds.height * rect.height / bounds.width;
>           y = (rect.height - height) / 2;
>          } else {
>           height = rect.height;
>           width = bounds.width * rect.width / bounds.height;
>           x = (rect.width - width) / 2;
>          }
>          e.gc.drawImage (image, 0, 0, bounds.width, bounds.height, x, y,
> width, height);
>         }
>        }
>       }
>      };
>      c.addListener (SWT.Dispose, listener);
>      c.addListener (SWT.Paint, listener);
>      c.setLayoutData (new RowData (100, 100));
>     }
>    }
>    comp.pack ();
>    sc.layout ();
>   }
>  });
>  shell.setSize (300, 300);
>  shell.open ();
>  while (!shell.isDisposed ()) {
>   if (!display.readAndDispatch ()) display.sleep ();
>  }
>  display.dispose ();
> }
> }
>
> "Schnul" <schnul@xxxxxx> wrote in message
news:b7p0vh$pd$1@xxxxxxxxxxxxxxxx
> > Hi there!
> >
> > I hope this is the right place to post this question... I am working on
a
> > standalone application and started using SWT as I think it's a really
> great
> > UI.
> >
> > Now I would like to display a thumbnail, but I don't know whether or not
> > there is a way to do that and if yes, how to do it. My images are quite
> big
> > and would like to avoid that I've to create own thumbnail files. When I
> try
> > to use the ImageDescriptor I already get an Out of Memory error (I tried
> to
> > use the descriptor and then to resize the image).
> >
> > I would really be happy if somebody could let me know if there is a way
to
> > do that. Might be there is no way yet, because SWT was not designed for
> such
> > reasons (or not yet).
> >
> > Thanks,
> > Chris
> >
> >
>
>