我想显示类似于java2s.com“创建惰性文件树”的文件树,但要包括实际的系统图标-
特别是对于文件夹。SWT似乎不提供此功能(Program API不支持文件夹),因此我提出了以下建议:
public Image getImage(File file)
{
ImageIcon systemIcon = (ImageIcon) FileSystemView.getFileSystemView().getSystemIcon(file);
java.awt.Image image = systemIcon.getImage();
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
int[] data = ((DataBufferInt) bufferedImage.getData().getDataBuffer()).getData();
ImageData imageData = new ImageData(width, height, 24, new PaletteData(0xFF0000, 0x00FF00, 0x0000FF));
imageData.setPixels(0, 0, data.length, data, 0);
Image swtImage = new Image(this.display, imageData);
return swtImage;
}
但是,应该透明的区域以黑色显示。我该如何工作,还是应该采用其他方法?
更新:
我认为原因完全PaletteData
不是为了透明。
现在,我填补BufferedImage
与Color.WHITE
现在,这是一个可接受的解决方法。不过,我想在这里知道真正的解决方案…
co](http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet156.java?view=co):
static ImageData convertToSWT(BufferedImage bufferedImage) {
if (bufferedImage.getColorModel() instanceof DirectColorModel) {
DirectColorModel colorModel = (DirectColorModel)bufferedImage.getColorModel();
PaletteData palette = new PaletteData(colorModel.getRedMask(), colorModel.getGreenMask(), colorModel.getBlueMask());
ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette);
for (int y = 0; y < data.height; y++) {
for (int x = 0; x < data.width; x++) {
int rgb = bufferedImage.getRGB(x, y);
int pixel = palette.getPixel(new RGB((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF));
data.setPixel(x, y, pixel);
if (colorModel.hasAlpha()) {
data.setAlpha(x, y, (rgb >> 24) & 0xFF);
}
}
}
return data;
} else if (bufferedImage.getColorModel() instanceof IndexColorModel) {
IndexColorModel colorModel = (IndexColorModel)bufferedImage.getColorModel();
int size = colorModel.getMapSize();
byte[] reds = new byte[size];
byte[] greens = new byte[size];
byte[] blues = new byte[size];
colorModel.getReds(reds);
colorModel.getGreens(greens);
colorModel.getBlues(blues);
RGB[] rgbs = new RGB[size];
for (int i = 0; i < rgbs.length; i++) {
rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF, blues[i] & 0xFF);
}
PaletteData palette = new PaletteData(rgbs);
ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette);
data.transparentPixel = colorModel.getTransparentPixel();
WritableRaster raster = bufferedImage.getRaster();
int[] pixelArray = new int[1];
for (int y = 0; y < data.height; y++) {
for (int x = 0; x < data.width; x++) {
raster.getPixel(x, y, pixelArray);
data.setPixel(x, y, pixelArray[0]);
}
}
return data;
}
return null;
}
然后您可以这样称呼它:
static Image getImage(File file) {
ImageIcon systemIcon = (ImageIcon) FileSystemView.getFileSystemView().getSystemIcon(file);
java.awt.Image image = systemIcon.getImage();
if (image instanceof BufferedImage) {
return new Image(display, convertToSWT((BufferedImage)image));
}
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
return new Image(display, convertToSWT(bufferedImage));
}
问题内容: 如何在中显示文件的默认系统图标?即文件中的图标应与桌面和资源管理器中显示的图标相同? 例如,NetBeans图标的外观将与桌面上的外观不同! 这该怎么做? 问题答案: 我们可以通过调用类中的静态方法来使用该类并获取其对象,然后使用该方法获取一个对象并返回其图标。 和类存在于包中。 类在包中。 注意: 不扩展。因此,您不能在 代表当前帧。假设编写此代码的类是的子类 或者以一种简单的方式
我正在做一个SWT项目,但是我将广泛使用来生成BufferedImages。我将以这种方式生成数十万张图像。 问题是,SWT似乎无法显示BuffereImage,并且有自己的类。我知道可以将BuffereImage转换为SWT的映像,但SWT的映像似乎需要手动处理,并且不像Swing的BuffereImage那样具有自动垃圾收集功能。 另外,我认为计算机要不断地从BuffereImage转换为Im
我正在尝试为Android牛轧糖开发一个应用程序,我想在状态栏中显示一些信息/文本,生成一个Android服务例程。所以我的问题是,我不知道如何显示状态栏中的文本。 我添加了一个示例图像来显示我的确切意思(红圈)。我知道这是有可能的,因为我在play Store的一款电池监控器应用中看到了它。 我已经尝试了notificationbatch.builder,但我认为这不是正确的方法。也许是一个叠加
问题内容: 我想使用IPython笔记本作为交互式分析我使用Biopython模块制作的一些基因组图的方法。尽管有大量有关如何在IPython笔记本中使用内联图形的文档,但GenomeDiagram使用ReportLab工具箱,我认为IPython不支持内联图形。 但是,我当时想,一种解决方法是将绘图/基因组图写到文件中,然后打开图像内联图像,结果将是相同的,如下所示: 但是,我不知道该怎么做-或
问题内容: 是否可以在 Django视图中显示PDF文件,而不是使用户必须下载它才能看到它? 如果有可能,将如何做? 这是我到目前为止所拥有的 问题答案: 简而言之,如果你有一个PDF文件,并且想通过Django视图输出它,那么你要做的就是将文件内容转储到响应中并以适当的mimetype发送。 你可能可以直接返回响应而无需指定Content-Disposition,但这可以更好地表明你的意图,并且
我想在GitHub上的一个Markdown文件中显示一些图像。我发现它是这样工作的: 它可以在我的本地磁盘上工作,但不能在GitHub上工作。 有人知道这个问题吗?