Java SWT:在图像上显示网格
Java SWT: Displaying a Grid over an image
我需要使用 Java SWT 执行以下操作:
- 将像素列表显示为图像
- 允许用户select像素子集
- 在图像上显示网格作为用户指南。图像仍然需要处理鼠标事件
1) 和 2) 很简单,但是我不知道如何实现 3)。
阅读 SWT,我没有看到在图像上放置透明覆盖的方法。这可能吗?还有其他方法吗?
只需在 Image
上方绘制网格即可。将 GG#setAlpha(int)
设置为较低的值以使线条透明。这不会干扰鼠标事件:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Whosebug");
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();
}
看起来像这样:
我需要使用 Java SWT 执行以下操作:
- 将像素列表显示为图像
- 允许用户select像素子集
- 在图像上显示网格作为用户指南。图像仍然需要处理鼠标事件
1) 和 2) 很简单,但是我不知道如何实现 3)。 阅读 SWT,我没有看到在图像上放置透明覆盖的方法。这可能吗?还有其他方法吗?
只需在 Image
上方绘制网格即可。将 GG#setAlpha(int)
设置为较低的值以使线条透明。这不会干扰鼠标事件:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Whosebug");
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();
}
看起来像这样: