我正在尝试在Browser-widget(SWT)中显示图像。这些图像可以在jar文件中找到(插件开发)。但是:这不可能直接实现,因为浏览器小部件需要某种URL或URI信息。
我的想法是将SWT图像转换为数据URI值,我可以将其引入每个给定img元素的src属性。我知道,从性能的角度来看,这不是一个好的解决方案,但我不介意速度劣势。
我想知道如何将SWT图像转换为数据URI值,以便在浏览器窗口小部件中使用。
我的代码到目前为止:
package editor.plugin.editors.htmlprevieweditor;
import editor.plugin.Activator;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
public class HtmlPreview extends Composite implements DisposeListener {
private final Browser content;
public HtmlPreview(final Composite parent, final int style) {
super(parent, style);
this.setLayout(new FillLayout());
content = new Browser(this, style);
final ImageData imageData = Activator.getImageDescriptor(Activator.IMAGE_ID + Activator.PREVIEW_SMALL_ID).getImageData();
content.setText("<html><body><img src=\"data:image/png;base64," + imageData + "\"/></body></html>"); // need help on changing imageData to a base64-encoded String of bytes?
this.addDisposeListener(this);
}
@Override
public void widgetDisposed(final DisposeEvent e) {
e.widget.dispose();
}
}
非常感谢任何帮助:)!
编辑1:我已阅读SWT Image to/from String,但不幸的是,它似乎并未完全满足我的需求。
编辑2:我不知道它是否重要,但我正在尝试加载具有每像素alpha透明度的PNG24图像。
答案 0 :(得分:2)
如果您只说“SWT中的浏览器”,那么问题就太笼统了。 Mozzila浏览器支持jar
URL协议,您可以这样做:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final URL url = ShellSnippet.class.getResource("/icons/full/message_error.gif");
final Browser browser = new Browser(shell, SWT.MOZILLA);
final String html = String.format("<html><head/><body>image: <img src=\"%s\"/></body></html>", url);
browser.setText(html);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
看起来像这样:
我使用了JFace jar中的图像来保持代码片段简单,但对大多数人来说都是开箱即用的。它是GIF,但我希望它与PNG文件一样好用。
如果您使用Internet Explorer,我建议不要使用,因为您的应用程序依赖于操作系统版本,这不起作用。它看起来像这样(在片段中将样式从SWT.MOZILLA更改为SWT.NONE):
但它理解file
协议,您可以将文件复制到临时文件夹,并使用File.toURL()
直接创建URL到文件。这适用于任何浏览器。
我无法在WEBKIT broswer上测试简单的解决方案。如果有人可以,请将结果发表在评论中。