SWT image to / from string

I am trying to convert a SWT image to String and vice versa:

In line:

Display display = new Display();
final Image image = new Image(display, "c:\test.png");
 // Looks good
showImage(image ,600,400);
ImageData imageData = testImage.getImageData();
byte[] data = imageData.data;
String imageString = new String(Base64.encode(data));

Return to image:

byte[] decode = Base64.decode(imageString.getBytes());
decode.toString();
Image c_img = new Image(Display.getCurrent(), stringToInputStream(decode.toString()));
 // Throws exception.
showImage(c_image ,600,400);

Where:

  private static void showImage(final Image image, int w, int h) {
    Display display = new Display();
    Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.DOUBLE_BUFFERED);
    shell.setLayout(new FillLayout());
    shell.addListener(SWT.Paint, new Listener() {
      public void handleEvent(Event e) {
        GC gc = e.gc;
        int x = 10, y = 10;
        gc.drawImage(image, x, y);
        gc.dispose();
      }
    });
    shell.setSize(w, h);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    if (image != null && !image.isDisposed()) {
      image.dispose();
    }
    display.dispose();
  }


  private static InputStream stringToInputStream(String input) {
    InputStream is = null;
    try {
      is = new ByteArrayInputStream(input.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    return is;
  }

Error displaying image from String:

org.eclipse.swt.SWTException: Unsupported or unrecognized format
    at org.eclipse.swt.SWT.error(SWT.java:4083)
    at org.eclipse.swt.SWT.error(SWT.java:3998)
    at org.eclipse.swt.SWT.error(SWT.java:3969)
    at org.eclipse.swt.internal.image.FileFormat.load(FileFormat.java:82)
    at org.eclipse.swt.graphics.ImageLoader.load(ImageLoader.java:130)
    at org.eclipse.swt.graphics.ImageDataLoader.load(ImageDataLoader.java:22)
    at org.eclipse.swt.graphics.ImageData.<init>(ImageData.java:331)
    at org.eclipse.swt.graphics.Image.<init>(Image.java:545)

Am I the first to do this? Or are there some examples showing how this should be done correctly?

+3
source share
3 answers

Of course, this is wrong:

stringToInputStream(decode.toString())

If you call toString()in an array of bytes, you do not get the bytes converted to String; you will get Stringthat looks like

byte[@6536753

You need to build ByteArrayInputStreamfrom the very "decoding".

+4
source

Why are you working with String? Byte [] is not suitable for you? You add a useless step in your operations, transforming it.

0

If anyone needs this, I have achieved this using this link: http://www.programcreek.com/2009/02/java-convert-image-to-byte-array-convert-byte-array-to-image /

After many attempts, using the proposed approach to the question or using ImageLoader, I always got:

org.eclipse.swt.SWTException: unsupported or unrecognized format

But with the link approach (using Base64.decode and encode) it works.

0
source

All Articles