ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
1318
1318
EMPFEHLEN
-
31.08.07 22:39 #1
- Registriert seit
- Aug 2007
- Beiträge
- 4
Hallo,
ich habe folgendes Problem, und zwar habe ich einen Explorer auf Grundlage des TreeViewer mit SWT implementiert und bekomme es nicht hin die Icons der Dateien mit anzuzeigen. Im AWT kam ich immer an die Icons über FileSystemView, aber Icon-Objecte möchte der LabelProvider des TreeViewers nicht. Dieser benötigt eine Image-Instanz. Wie kann ich also aus einem Icon-Object ein Image-Object machen oder wie kann ich von einem File direkt eine Image-Instanz erzeugen?
Code :1 2
ImageDescriptor desc = ImageDescriptor.createFromFile(null,file.getAbsolutePath()); Image image = desc.createImage();
habe ich auch schon probiert, funtzt aber net... wahrscheinlich wegen null als erster Parameter.
Kann mir jemand helfen... Es ist sichlich ne simple Sache, nur ich find sie bzw. sehe sie net.
-
Wenn du mit SWT programmierst solltest du das nicht mit AWT mischen wenn es nicht unbedingt nötig ist.
In SWT kannst du ein Image sehr einfach erzeugen:
SWT API: Image
Also im Zweifelsfall:
Nicht vergessen das Bild mit i.dispose() wieder freizugeben wenn es nicht mehr benötigt wird. Memory Leaks sind sehr unschön.
Abgesehen davon gehört der TreeViewer nicht direkt zu SWT sondern zu JFace.
-
01.09.07 10:13 #3
- Registriert seit
- Aug 2007
- Beiträge
- 4
...dass ist mir schon klar. Ich möchte aber die Systemicons von Dateien und Verzeichnisse anzeigen so wie im Windows-Explorer und nicht einfach nur Bilder laden.
-
-
01.09.07 13:13 #5
- Registriert seit
- Aug 2007
- Beiträge
- 4
ja, genau... ich hab hierzu jetzt auch schon einen ersten Ansatz... und zwar die Icons zunächst über die FileSystemView besorgen, dann daraus ein BufferedImage erzeugen... von diesem das ColorModel in SWT transferieren und ein ImageDate erzeugen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
public ImageData getImageData() { Icon icon = FileSystemView.getFileSystemView().getSystemIcon(file); BufferedImage image = new BufferedImage(icon.getIconWidth(),icon.getIconHeight(),BufferedImage.TYPE_BYTE_INDEXED); icon.paintIcon(null, image.getGraphics(), 0, 0); return convertToSWT(image); } 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); WritableRaster raster = bufferedImage.getRaster(); int[] pixelArray = new int[3]; for (int y = 0; y < data.height; y++) { for (int x = 0; x < data.width; x++) { raster.getPixel(x, y, pixelArray); int pixel = palette.getPixel(new RGB(pixelArray[0], pixelArray[1], pixelArray[2])); data.setPixel(x, y, pixel); } } 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; }
jedoch habe ich noch folgendes Problem... und zwar ist der Hintergrund der angezeigten Pixel der SystemIcons Schwarz, das liegt wahrscheinlich daran, dass die Transparenten Pixel nicht richtig convertiert bzw. interpretiert werden.
Ich habe die Konstante des verwendeten ColorModel einfach selbst gesetzt (geraten), was nicht gut ist. Wie komme ich an das verwende ColorModel des Icons ran, um dann die richtige Konstante bei der Erzeugung des BufferedImage zu setzen?
-
Mein Codebeispiel tut doch das was du willst....
-
01.09.07 13:36 #7
- Registriert seit
- Aug 2007
- Beiträge
- 4
nein... es sucht nur nach Programme mit Hilfe der File-Extension. So müsste ich von jeder Datei die Extension Extrahieren und dann danach suchen (ineffizient)... und was ist mit dem SystemIcon von Ordnern wie komme ich dann daran?
-
Hallo!
Und, hast du das Problem mit Icons gelost? Ich habe dasselbe Problem.....
-
Howdie.
Mit SWT kenne ich mich nicht aus, und weiß nicht, ob du da Swing-Komponenten verwenden kannst. Auf die Gefahr hin, dass dir das nichts bringt:
Falls das nichts ist, gibt es vielleicht ein Äquivalent für SWT.Code java:1 2 3 4 5
import javax.swing.filechooser.FileSystemView; File myFile = new File("blubb"); FileSystemView fsView = FileSystemView.getFileSystemView(); fsView.getSystemIcon(myFile); // gibt ein javax.swing.Icon interface zurück
Gruß und viel Erfolg,
miffi"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Ähnliche Themen
-
TreeView mit verschiedenen Icons!?
Von thefaxx im Forum .NET Windows FormsAntworten: 4Letzter Beitrag: 21.06.08, 02:19 -
Icons anzeigen (MS VS C++ 6.0)
Von sand13r im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 18.06.08, 08:29 -
SWT, JFace - Treeview Icons austauschen
Von pyroben im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 10.09.07, 14:33 -
C# - TreeView-Icons wechseln - zur Laufzeit
Von Alexander12 im Forum .NET Windows FormsAntworten: 11Letzter Beitrag: 13.11.05, 22:13 -
Datensätze in TreeView anzeigen
Von Der_Yogi im Forum .NET ArchivAntworten: 2Letzter Beitrag: 22.03.04, 16:30





Zitieren

Login





