📄 swtutils.java
字号:
color.getBlue()); } /** * Creates a swt color instance to match the rgb values * of the specified awt paint. For now, this method test * if the paint is a color and then return the adequate * swt color. Otherwise plain black is assumed. * * @param device The swt device to draw on (display or gc device). * @param paint The awt color to match. * @return a swt color object. */ public static Color toSwtColor(Device device, java.awt.Paint paint) { java.awt.Color color; if (paint instanceof java.awt.Color) { color = (java.awt.Color) paint; } else { try { throw new Exception("only color is supported at present... " + "setting paint to uniform black color"); } catch (Exception e) { e.printStackTrace(); color = new java.awt.Color(0, 0, 0); } } return new org.eclipse.swt.graphics.Color(device, color.getRed(), color.getGreen(), color.getBlue()); } /** * Creates a swt color instance to match the rgb values * of the specified awt color. alpha channel is not supported. * Note that the dispose method will need to be called on the * returned object. * * @param device The swt device to draw on (display or gc device). * @param color The awt color to match. * @return a swt color object. */ public static Color toSwtColor(Device device, java.awt.Color color) { return new org.eclipse.swt.graphics.Color(device, color.getRed(), color.getGreen(), color.getBlue()); } /** * Transform an awt Rectangle2d instance into a swt one. * The coordinates are rounded to integer for the swt object. * @param rect2d The awt rectangle to map. * @return an swt <code>Rectangle</code> object. */ public static Rectangle toSwtRectangle(Rectangle2D rect2d) { return new Rectangle( (int) Math.round(rect2d.getMinX()), (int) Math.round(rect2d.getMinY()), (int) Math.round(rect2d.getWidth()), (int) Math.round(rect2d.getHeight())); } /** * Transform a swt Rectangle instance into an awt one. * @param rect the swt <code>Rectangle</code> * @return a Rectangle2D.Double instance with * the eappropriate location and size. */ public static Rectangle2D toAwtRectangle(Rectangle rect) { Rectangle2D rect2d = new Rectangle2D.Double(); rect2d.setRect(rect.x, rect.y, rect.width, rect.height); return rect2d; } /** * Returns an AWT point with the same coordinates as the specified * SWT point. * * @param p the SWT point (<code>null</code> not permitted). * * @return An AWT point with the same coordinates as <code>p</code>. * * @see #toSwtPoint(java.awt.Point) */ public static Point2D toAwtPoint(Point p) { return new java.awt.Point(p.x, p.y); } /** * Returns an SWT point with the same coordinates as the specified * AWT point. * * @param p the AWT point (<code>null</code> not permitted). * * @return An SWT point with the same coordinates as <code>p</code>. * * @see #toAwtPoint(Point) */ public static Point toSwtPoint(java.awt.Point p) { return new Point(p.x, p.y); } /** * Returns an SWT point with the same coordinates as the specified AWT * point (rounded to integer values). * * @param p the AWT point (<code>null</code> not permitted). * * @return An SWT point with the same coordinates as <code>p</code>. * * @see #toAwtPoint(Point) */ public static Point toSwtPoint(java.awt.geom.Point2D p) { return new Point((int) Math.round(p.getX()), (int) Math.round(p.getY())); } /** * Creates an AWT <code>MouseEvent</code> from a swt event. * This method helps passing SWT mouse event to awt components. * @param event The swt event. * @return A AWT mouse event based on the given SWT event. */ public static MouseEvent toAwtMouseEvent(org.eclipse.swt.events.MouseEvent event) { int button = MouseEvent.NOBUTTON; switch (event.button) { case 1: button = MouseEvent.BUTTON1; break; case 2: button = MouseEvent.BUTTON2; break; case 3: button = MouseEvent.BUTTON3; break; } int modifiers = 0; if ((event.stateMask & SWT.CTRL) != 0) { modifiers |= InputEvent.CTRL_DOWN_MASK; } if ((event.stateMask & SWT.SHIFT) != 0) { modifiers |= InputEvent.SHIFT_DOWN_MASK; } if ((event.stateMask & SWT.ALT) != 0) { modifiers |= InputEvent.ALT_DOWN_MASK; } MouseEvent awtMouseEvent = new MouseEvent(DUMMY_PANEL, event.hashCode(), event.time, modifiers, event.x, event.y, 1, false, button); return awtMouseEvent; } /** * Converts an AWT image to SWT. * * @param image the image (<code>null</code> not permitted). * * @return Image data. */ public static ImageData convertAWTImageToSWT(Image image) { if (image == null) { throw new IllegalArgumentException("Null 'image' argument."); } int w = image.getWidth(null); int h = image.getHeight(null); if (w == -1 || h == -1) { return null; } BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = bi.getGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); return convertToSWT(bi); } /** * Converts a buffered image to SWT <code>ImageData</code>. * * @param bufferedImage the buffered image (<code>null</code> not * permitted). * * @return The image data. */ public 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; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -