- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的 Java 程序中,我需要分析给定坐标中像素的颜色。由于我需要经常这样做,所以我首先捕获屏幕的一部分,然后获取像素颜色。我正在这样做:
BufferedImage bi = robot.createScreenCapture(new Rectangle(0,0,100,100));
...
pxcolor = GetPixelColor(bi,x,y);
...
ImageIO.write(bi, "bmp", new File("myScreenShot.bmp"));
GetPixelColor 函数非常明显:
public Color GetPixelColor(BufferedImage b, int x, int y)
{
int pc = b.getRGB(x, y);
Color ccc = new Color(pc,true);
int red = (pc & 0x00ff0000) >> 16; // for testing
int green = (pc & 0x0000ff00) >> 8; // for testing
int blue = pc & 0x000000ff; // for testing
return ccc;
}
出于测试目的,我创建了一个 pure pink picture (RGB(255,0,255))。问题是即使像素是纯粉红色,该函数也会返回类似 RGB(250,61,223) 的内容,并在那里测试变量红色、绿色和蓝色。另外,保存的文件(myScreenShot.bmp)looks quite different .
我做错了什么。它会以某种方式与 ColorModel 相关吗?
UPD:从 bi 获取 DataBuffer 似乎没有产生正确的结果——生成的 DataBuffer 的第一个元素等于“-2105371”。我不知道减号是从哪里来的,但如果我将它转换为十六进制,我会得到类似“FFFFFFFFFFDFDFE5”的东西。真正的像素 RGB 是 (E5,E5,EB),缓冲区已经损坏,取而代之的是 RGB(DF,DF,E5)。这已经让我抓狂了。
最佳答案
这很可能是由于颜色模型。
根据 this code无论屏幕的颜色深度如何,它都使用 DirectColorModel
(见下文)。
/*
* Fix for 4285201
* Create a DirectColorModel equivalent to the default RGB ColorModel,
* except with no Alpha component.
*/
screenCapCM = new DirectColorModel(24,
/* red mask */ 0x00FF0000,
/* green mask */ 0x0000FF00,
/* blue mask */ 0x000000FF);
关于java - BufferedImage 和 createScreenCapture 产生错误的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519523/
我有代码: Rectangle area = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); BufferedImage bi
这是我写的截屏类: public class imagemanipulation { Dimension screenResolution; Rectangle screenRecta
我一直在尝试构建一个屏幕录像机来练习我萎缩的 Java 技能(尽管已经有太多了)。 但是,我遇到了 Robot 类速度慢得离谱的问题——即使在我的 i7 动力机器上也可能是 15fps,而在我的 ma
以下代码捕获屏幕: import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.a
我需要抓取一系列屏幕截图并将它们连接成一部电影。我正在尝试使用 java Robot 类来捕获屏幕。 但是 createScreenCapture() 方法在我的机器上需要超过 1 秒的时间。我什至无
我几乎想知道的是,在使用 java.robot.createScreenCapture() 截取屏幕截图时,是否有任何方法可以获得 alpha/透明度? 最佳答案 不,据我所知没有。老实说,我认为这没
我尝试在 Windows 7 上使用以下代码捕获屏幕 Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScre
我有一个常见的问题,当 rdp session 关闭时屏幕截图变成黑色。没有找到解决此问题的任何有效答案。我有 java-selenium 测试。代码: private void screenShot
在我的 Java 程序中,我需要分析给定坐标中像素的颜色。由于我需要经常这样做,所以我首先捕获屏幕的一部分,然后获取像素颜色。我正在这样做: BufferedImage bi = robot.crea
我正在编写一个以设定的时间间隔捕获屏幕的程序,当我开始测试时,我发现在它开始捕获图片后几乎立即出现了 OutOfMemoryException。我尝试分配更多内存 - 我给了它 256m,但这几乎没有
我正在制作一个程序,要求每秒至少捕获 24 个屏幕截图。目前使用下面的代码,我每大约 94 毫秒只能得到 1 个,所以大约每秒 10 个。 我不想使用任何第 3 方库,因为我试图让它尽可能小,但如果我
我正在 try catch 屏幕而不包括我的应用程序窗口。为此,我首先调用 setVisible(false),然后调用 createScreenCapture 方法,最后调用 setVisible(
如果我运行这段代码: BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToo
我的电脑上有两个屏幕。我尝试在每个屏幕上进行屏幕截图。我正在使用以下代码: GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphic
我是一名优秀的程序员,十分优秀!