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;
}
Ошибка при отображении изображения из строки:
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)
Я первый, кто это сделал? Или есть несколько примеров, показывающих, как это должно быть сделано правильно?
3 ответа
Конечно, это неправильно
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 и закодировать) это работает.