SWT图像到/从字符串
我试图将SWT图像转换为字符串,反之亦然:
字符串:
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));
回到图片:
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);
哪里:
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; }
从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.(ImageData.java:331) at org.eclipse.swt.graphics.Image.(Image.java:545)
我是第一个这样做的吗? 或者是否有一些例子说明如何正确地完成这项工作?
当然这是错的:
stringToInputStream(decode.toString())
如果在字节数组上调用toString()
,则不会将字节转换为String
; 你得到一个看起来像的String
byte[@6536753
您需要从“解码”本身构造ByteArrayInputStream
。
你为什么要用String操作? 字节[]对你不好吗? 您在转换它的操作中添加了无用的步骤。
如果有人需要它,我可以通过以下链接实现它: http : //www.programcreek.com/2009/02/java-convert-image-to-byte-array-convert-byte-array-to-image /
经过大量的尝试,使用建议的问题方法,或者使用ImageLoader,我总是得到:
org.eclipse.swt.SWTException:不支持或无法识别的格式
但是通过链接的方法(使用Base64.decode和encode),它可以工作。