如何将现有的彩色BufferedImage转换为单色?我希望图像只在两个rgb代码之间完全分开,黑色和白色.因此,如果图像周围的边框是背景的较浅或较暗的阴影,并且背景正在转换为白色,那么我希望边框也转换为白色,依此类推.
我怎样才能做到这一点?
如果需要保存图像/从磁盘加载它,我可以在必要时这样做.
编辑:代码来测试这个:
package test;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashSet;
import javax.imageio.ImageIO;
public class Test
{
public static void main(String[] args)
{
try
{
BufferedImage img = ImageIO.read(new File("http://i.stack.imgur.com/yhCnH.png") );
BufferedImage gray = new BufferedImage(img.getWidth(), img.getHeight(),
BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g = gray.createGraphics();
g.drawImage(img, 0, 0, null);
HashSet<Integer> colors = new HashSet<>();
int color = 0;
for (int y = 0; y < gray.getHeight(); y++)
{
for (int x = 0; x < gray.getWidth(); x++)
{
color …
Run Code Online (Sandbox Code Playgroud) 是否可以使用SWT在表项目上显示右键菜单?菜单对于每个项目都是不同的,例如对于某些行,某些菜单项将被启用,而对于其他项,它们将被禁用.因此,每一行都需要自己的菜单,在设置菜单时我需要一种方法来识别我正在使用哪一行.
有任何想法吗?
我了解使用创建的颜色new Color()
需要手动处理。通过来获得的颜色Device.getSystemColor( SWT.COLOR_... )
呢?是否也需要处理它们?
如果我使用以下代码创建一个新shell:
shell = new Shell( Display.getDefault(), SWT.RESIZE);
Run Code Online (Sandbox Code Playgroud)
然后这给了我一个没有标题栏或最小化/最大化按钮的shell,这就是我想要的.我可以将这个窗口调整到任何大小,这很好.但问题是,窗口固定在它的位置,我不能通过拖动它来移动它.
如果我添加SWT.CASCADE
或者SWT.CLOSE
,这给了我标题栏和关闭按钮,这是我不想要的,但是,它限制了窗口可以调整大小的程度,即我不能水平调整它的大小.限制.
如何在没有关闭按钮/标题栏的情况下使窗口可以移动?如果在SWT中没有本地方式来执行此操作,我可以通过侦听鼠标拖动事件并手动设置shell的位置来实现吗?如果是这样,我如何从鼠标的移动中获得鼠标坐标?
帮助将不胜感激.谢谢!