实用方法绘制图形 : 二维图形 « SWT-JFace-Eclipse « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » SWT-JFace-Eclipse » 二维图形屏幕截图 
实用方法绘制图形


//Send questions, comments, bug reports, etc. to the authors:

//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.Display;

/**
 * This class contains utility methods for drawing graphics
 */
public class GraphicsUtils {
  /**
   * Draws text vertically (rotates plus or minus 90 degrees). Uses the current
   * font, color, and background.
   * <dl>
   * <dt><b>Styles: </b></dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   
   @param string the text to draw
   @param x the x coordinate of the top left corner of the drawing rectangle
   @param y the y coordinate of the top left corner of the drawing rectangle
   @param gc the GC on which to draw the text
   @param style the style (SWT.UP or SWT.DOWN)
   *          <p>
   *          Note: Only one of the style UP or DOWN may be specified.
   *          </p>
   */
  public static void drawVerticalText(String string, int x, int y, GC gc,
      int style) {
    // Get the current display
    Display display = Display.getCurrent();
    if (display == nullSWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Determine string's dimensions
    FontMetrics fm = gc.getFontMetrics();
    Point pt = gc.textExtent(string);

    // Create an image the same size as the string
    Image stringImage = new Image(display, pt.x, pt.y);

    // Create a GC so we can draw the image
    GC stringGc = new GC(stringImage);

    // Set attributes from the original GC to the new GC
    stringGc.setForeground(gc.getForeground());
    stringGc.setBackground(gc.getBackground());
    stringGc.setFont(gc.getFont());

    // Draw the text onto the image
    stringGc.drawText(string, 00);

    // Draw the image vertically onto the original GC
    drawVerticalImage(stringImage, x, y, gc, style);

    // Dispose the new GC
    stringGc.dispose();

    // Dispose the image
    stringImage.dispose();
  }

  /**
   * Draws an image vertically (rotates plus or minus 90 degrees)
   * <dl>
   * <dt><b>Styles: </b></dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   
   @param image the image to draw
   @param x the x coordinate of the top left corner of the drawing rectangle
   @param y the y coordinate of the top left corner of the drawing rectangle
   @param gc the GC on which to draw the image
   @param style the style (SWT.UP or SWT.DOWN)
   *          <p>
   *          Note: Only one of the style UP or DOWN may be specified.
   *          </p>
   */
  public static void drawVerticalImage(Image image, int x, int y, GC gc, int style) {
    // Get the current display
    Display display = Display.getCurrent();
    if (display == nullSWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Use the image's data to create a rotated image's data
    ImageData sd = image.getImageData();
    ImageData dd = new ImageData(sd.height, sd.width, sd.depth, sd.palette);

    // Determine which way to rotate, depending on up or down
    boolean up = (style & SWT.UP== SWT.UP;

    // Run through the horizontal pixels
    for (int sx = 0; sx < sd.width; sx++) {
      // Run through the vertical pixels
      for (int sy = 0; sy < sd.height; sy++) {
        // Determine where to move pixel to in destination image data
        int dx = up ? sy : sd.height - sy - 1;
        int dy = up ? sd.width - sx - : sx;

        // Swap the x, y source data to y, x in the destination
        dd.setPixel(dx, dy, sd.getPixel(sx, sy));
      }
    }

    // Create the vertical image
    Image vertical = new Image(display, dd);

    // Draw the vertical image onto the original GC
    gc.drawImage(vertical, x, y);

    // Dispose the vertical image
    vertical.dispose();
  }

  /**
   * Creates an image containing the specified text, rotated either plus or minus
   * 90 degrees.
   * <dl>
   * <dt><b>Styles: </b></dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   
   @param text the text to rotate
   @param font the font to use
   @param foreground the color for the text
   @param background the background color
   @param style direction to rotate (up or down)
   @return Image
   *         <p>
   *         Note: Only one of the style UP or DOWN may be specified.
   *         </p>
   */
  public static Image createRotatedText(String text, Font font, Color foreground,
      Color background, int style) {
    // Get the current display
    Display display = Display.getCurrent();
    if (display == nullSWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Create a GC to calculate font's dimensions
    GC gc = new GC(display);
    gc.setFont(font);

    // Determine string's dimensions
    FontMetrics fm = gc.getFontMetrics();
    Point pt = gc.textExtent(text);

    // Dispose that gc
    gc.dispose();

    // Create an image the same size as the string
    Image stringImage = new Image(display, pt.x, pt.y);

    // Create a gc for the image
    gc = new GC(stringImage);
    gc.setFont(font);
    gc.setForeground(foreground);
    gc.setBackground(background);

    // Draw the text onto the image
    gc.drawText(text, 00);

    // Draw the image vertically onto the original GC
    Image image = createRotatedImage(stringImage, style);

    // Dispose the new GC
    gc.dispose();

    // Dispose the horizontal image
    stringImage.dispose();

    // Return the rotated image
    return image;
  }

  /**
   * Creates a rotated image (plus or minus 90 degrees)
   * <dl>
   * <dt><b>Styles: </b></dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   
   @param image the image to rotate
   @param style direction to rotate (up or down)
   @return Image
   *         <p>
   *         Note: Only one of the style UP or DOWN may be specified.
   *         </p>
   */
  public static Image createRotatedImage(Image image, int style) {
    // Get the current display
    Display display = Display.getCurrent();
    if (display == nullSWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Use the image's data to create a rotated image's data
    ImageData sd = image.getImageData();
    ImageData dd = new ImageData(sd.height, sd.width, sd.depth, sd.palette);

    // Determine which way to rotate, depending on up or down
    boolean up = (style & SWT.UP== SWT.UP;

    // Run through the horizontal pixels
    for (int sx = 0; sx < sd.width; sx++) {
      // Run through the vertical pixels
      for (int sy = 0; sy < sd.height; sy++) {
        // Determine where to move pixel to in destination image data
        int dx = up ? sy : sd.height - sy - 1;
        int dy = up ? sd.width - sx - : sx;

        // Swap the x, y source data to y, x in the destination
        dd.setPixel(dx, dy, sd.getPixel(sx, sy));
      }
    }

    // Create the vertical image
    return new Image(display, dd);
  }
}


           
       
Related examples in the same category
1. SWT二维图表:流程SWT二维图表:流程
2. 使用Java2D关于SWT或Draw2D图形上下文使用Java2D关于SWT或Draw2D图形上下文
3. SWT二维的UnicodeSWT二维的Unicode
4. SWT二维简单演示SWT二维简单演示
5. SWT绘制二维SWT绘制二维
6. SWT Draw2D实例
7. 异或异或
8. 动画动画
9. 阿尔法渐变阿尔法渐变
10. 绘制绘制
11. 绘制文本演示绘制文本演示
12. GC创建
13. 调色板调色板
14. 透明度透明度
15. Draw2D样本Draw2D样本
16. 类分析仪类分析仪
17. 演示动画。使用双缓冲。演示动画。使用双缓冲。
18. 演示绘制圆弧演示绘制圆弧
19. 显示绘图多边形显示绘图多边形
20. 显示绘图点。它吸引了正弦波显示绘图点。它吸引了正弦波
21. 绘制回合矩形绘制回合矩形
22. 显示有关显示装置显示有关显示装置
23. 显示构造器的应用显示构造器的应用
24. 演示了如何利用垂直文本演示了如何利用垂直文本
25. 显示绘图线显示绘图线
26. 演示动画演示动画
27. 演示如何绘制文字演示如何绘制文字
28. 显示绘图椭圆形显示绘图椭圆形
29. 演示了如何利用文字颜色演示了如何利用文字颜色
30. SWT涂料
31. SWT图形范例SWT图形范例
32. SWT的OpenGL片段:绘制方
33. 图纸与变革,路径和alpha混合图纸与变革,路径和alpha混合
34. 绘制线条和多边形具有不同风格绘制线条和多边形具有不同风格
35. GC:实现一个简单的涂抹程序GC:实现一个简单的涂抹程序
36. GC:测量一个字符串GC:测量一个字符串
37. GC:绘制厚线GC:绘制厚线
38. 如何绘制直接在SWT控制如何绘制直接在SWT控制
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.