我正在使用机器人截取屏幕截图,然后在这些屏幕截图中搜索较小的图像。由于Gamma校正,这适用于Windows但不适用于OSX。我能想到的最佳解决方案是简单地匹配相似的颜色,而不是完全匹配颜色。我担心匹配相似的颜色将意味着超越getRGB,因此会减慢我的程序(因为它会截取多个屏幕截图并将它们与较小的图像进行比较以非常快速地搜索匹配项)。我的问题是,假设我有BufferedImageScreenshot和BufferedImagesmallImage,我将如何确定Screenshot.getRGB(1,1)和smallImage.getRGB(1,1)是否相似颜色?
我将使用BufferedImage的getRGB方法。我想检查图像的像素并查看其中哪些像素具有透明度(通常我将拥有的透明像素将完全透明)。如何从getRGB返回的int中获取它? 最佳答案 BufferedImageimg=....publicbooleanisTransparent(intx,inty){intpixel=img.getRGB(x,y);if((pixel>>24)==0x00){returntrue;}returnfalse;}当然img必须采用正确的格式TYPE_4BYTE_ABGR或某种支持alphachan
getRGB()方法返回单个int。我怎样才能将红色、绿色和蓝色都分别作为0到255之间的值? 最佳答案 一个像素由一个4字节(32位)整数表示,如下所示:00000000000000000000000011111111^Alpha^Red^Green^Blue所以,要获得单个颜色分量,您只需要一点二进制算术:intrgb=getRGB(...);intred=(rgb>>16)&0x000000FF;intgreen=(rgb>>8)&0x000000FF;intblue=(rgb)&0x000000FF;这确实是java.awt
getRGB()方法返回单个int。我怎样才能将红色、绿色和蓝色都分别作为0到255之间的值? 最佳答案 一个像素由一个4字节(32位)整数表示,如下所示:00000000000000000000000011111111^Alpha^Red^Green^Blue所以,要获得单个颜色分量,您只需要一点二进制算术:intrgb=getRGB(...);intred=(rgb>>16)&0x000000FF;intgreen=(rgb>>8)&0x000000FF;intblue=(rgb)&0x000000FF;这确实是java.awt
我有一个BufferedImagei,我想得到Color来自该图像的某个像素包括alpha值。使用x和y坐标标识像素。这是我尝试过的:Colorc=newColor(i.getRGB(x,y));出于某种原因,新的颜色对象包含正确的RGB,但alpha丢失了。我做错了什么?提前致谢 最佳答案 您正在使用的单参数Color构造函数会丢弃alpha信息。改用双参数版本并为hasalpha传入true:Colorc=newColor(i.getRGB(x,y),true);相关Javadoc:Color(intrgb)Createsano
我有从getRGB(x,y)获得的整数像素,但我不知道如何将其转换为RGBA格式。例如,-16726016应该是Color(0,200,0,255)。有什么建议吗? 最佳答案 如果我猜对了,你得到的是一个0xAARRGGBB形式的无符号整数,所以intb=(argb)&0xFF;intg=(argb>>8)&0xFF;intr=(argb>>16)&0xFF;inta=(argb>>24)&0xFF;会提取颜色成分。但是,快速浏览docs说你可以做Colorc=newColor(argb);或Colorc=newColor(argb
我正在使用这种方法获取图像中像素的整数值:intcolour=img.getRGB(x,y);然后我打印出这些值,我看到黑色像素对应于“-16777216”之类的值,一种蓝色对应“-16755216”之类的值等。有人可以解释一下这背后的逻辑吗值(value)? 最佳答案 RGBint颜色在其位中包含颜色的红、绿、蓝分量。您必须查看其二进制或十六进制表示,而不是将其视为整数(而不是查看其十进制表示)。一个int有32位,3x8=24用于存储RGB分量(每个8位),格式如下:210bitpos3210987654321098765432