Java 如何将SWT图像转换为用于浏览器小部件的数据URI

Java 如何将SWT图像转换为用于浏览器小部件的数据URI,java,swt,Java,Swt,我试图在浏览器小部件(SWT)中显示图像。这些图像可以在jar文件(插件开发)中找到。但是:这不可能直接实现,因为浏览器小部件需要某种URL或URI信息 我的想法是将SWT图像转换为数据URI值,我可以将其归纳为每个给定img元素的src属性。我知道,从性能的角度来看,这不是一个好的解决方案,但我不介意速度的缺点 我想知道如何将SWT图像转换为数据URI值,以便在浏览器小部件中使用 到目前为止,我的代码是: package editor.plugin.editors.htmlpreviewed

我试图在浏览器小部件(SWT)中显示图像。这些图像可以在jar文件(插件开发)中找到。但是:这不可能直接实现,因为浏览器小部件需要某种URL或URI信息

我的想法是将SWT图像转换为数据URI值,我可以将其归纳为每个给定img元素的src属性。我知道,从性能的角度来看,这不是一个好的解决方案,但我不介意速度的缺点

我想知道如何将SWT图像转换为数据URI值,以便在浏览器小部件中使用

到目前为止,我的代码是:

package editor.plugin.editors.htmlprevieweditor;
导入editor.plugin.Activator;
导入org.eclipse.swt.browser.browser;
导入org.eclipse.swt.events.DisposeEvent;
导入org.eclipse.swt.events.dispelistener;
导入org.eclipse.swt.graphics.ImageData;
导入org.eclipse.swt.layout.FillLayout;
导入org.eclipse.swt.widgets.Composite;
公共类HtmlPreview扩展了复合实现DisposeListener{
私有最终浏览器内容;
公共HtmlPreview(最终复合父级,最终整型样式){
超级(父母,风格);
this.setLayout(新的FillLayout());
内容=新浏览器(此,样式);
final ImageData ImageData=Activator.getImageDescriptor(Activator.IMAGE_ID+Activator.PREVIEW_SMALL_ID).getImageData();
content.setText(“”;//需要将imageData更改为base64编码的字节字符串的帮助吗?
本。addDisposeListener(本);
}
@凌驾
公共无效widgetDisposed(最终处置事件e){
e、 widget.dispose();
}
}
非常感谢您的帮助:)

编辑1:我读过,但不幸的是,它似乎没有完全满足我的需要


编辑2:我不知道这是否重要,但我正在尝试加载具有每像素alpha透明度的PNG24图像。

如果您只说“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();
}
publicstaticvoidmain(字符串[]args){
最终显示=新显示();
最终外壳=新外壳(显示);
setLayout(新的FillLayout());
最终URL=ShellSnippet.class.getResource(“/icons/full/message_error.gif”);
最终浏览器=新浏览器(shell,SWT.MOZILLA);
最终字符串html=String.format(“图像:”,url);
setext(html);
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
看起来是这样的:

我使用了JFace jar中的一个图像来保持代码片段的简单性,并且对大多数人来说都是开箱即用的。它是GIF格式的,但我希望它与PNG文件的效果一样好

如果您使用Internet Explorer,我不建议您使用它,因为您的应用程序依赖于操作系统版本,所以它不起作用。如下所示(在代码段中将样式从SWT.MOZILLA更改为SWT.NONE后):

但是,它确实了解
文件
协议,您可以将文件复制到临时文件夹,并使用
file.toURL()
直接创建指向文件的URL。这适用于任何浏览器


我无法在WEBKIT broswer上测试这个简单的解决方案。如果有人可以,请在评论中发布结果。

我已经读到,除非我指定SWT.MOZILLA并确保xulrunner.exe位于类路径上,否则我无法在Windows计算机上使用MOZILLA浏览器小部件。这意味着使用mozilla浏览器小部件会非常困难,尽管我很感激,因为它支持mozilla浏览器。我要试试看!非常感谢你的提示。一旦我找到了使用Mozilla浏览器小部件的方法,我会将此答案标记为正确答案,除非有人提供更好的答案。@Igor在我的例子中,我刚刚添加了:System.setProperty(“org.eclipse.swt.Browser.XULRunnerPath”,“到xulrunner的路径”);并且xul运行程序被复制到“xulrunner的路径”中。