Java SWT:在图像上显示网格

时间:2016-06-06 00:01:10

标签: java image image-processing swt

我需要使用Java SWT执行以下操作:

  1. 将像素列表显示为图像
  2. 允许用户选择像素的子集
  3. 在图像上显示网格作为用户指南。 Image仍然需要处理鼠标事件
  4. 1)和2)很简单,但我不知道如何实现3)。 阅读SWT,我没有看到在图像上放置透明叠加层的方法。这可能吗?还有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

只需在Image的顶部绘制网格即可。将GG#setAlpha(int)设置为较低的值以使线条透明。这不会干扰鼠标事件:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Stackoverflow");
    shell.setLayout(new FillLayout());

    Image image = new Image(display, "baz.png");

    Label label = new Label(shell, SWT.NONE);
    label.addListener(SWT.Paint, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            GC gc = event.gc;

            gc.drawImage(image, 0, 0);

            gc.setAlpha(30);

            int interval = image.getBounds().height;

            for (int i = 0; i < 10; i++)
            {
                int y = (int) Math.floor(i * (interval / 10.0));

                gc.drawLine(0, y, image.getBounds().width, y);
            }


            interval = image.getBounds().width;

            for (int i = 0; i < 10; i++)
            {
                int x = (int) Math.floor(i * (interval / 10.0));

                gc.drawLine(x, 0, x, image.getBounds().width);
            }

            gc.setAlpha(255);
        }
    });

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
    image.dispose();
}

看起来像这样:

enter image description here