[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
> >
> >
>
>