- java.lang.Object
-
- java.awt.image.PixelGrabber
-
- All Implemented Interfaces:
-
ImageConsumer
public class PixelGrabber extends Object implements ImageConsumer
PixelGrabber类实现了一个ImageConsumer,它可以附加到Image或ImageProducer对象,以检索该图像中的像素的子集。 这是一个例子:public void handlesinglepixel(int x, int y, int pixel) { int alpha = (pixel >> 24) & 0xff; int red = (pixel >> 16) & 0xff; int green = (pixel >> 8) & 0xff; int blue = (pixel ) & 0xff; // Deal with the pixel as necessary... } public void handlepixels(Image img, int x, int y, int w, int h) { int[] pixels = new int[w * h]; PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w); try { pg.grabPixels(); } catch (InterruptedException e) { System.err.println("interrupted waiting for pixels!"); return; } if ((pg.getStatus() & ImageObserver.ABORT) != 0) { System.err.println("image fetch aborted or errored"); return; } for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { handlesinglepixel(x+i, y+j, pixels[j * w + i]); } } }
-
-
Field Summary
-
Fields inherited from interface java.awt.image.ImageConsumer
COMPLETESCANLINES, IMAGEABORTED, IMAGEERROR, RANDOMPIXELORDER, SINGLEFRAME, SINGLEFRAMEDONE, SINGLEPASS, STATICIMAGEDONE, TOPDOWNLEFTRIGHT
-
-
构造方法摘要
构造方法 Constructor 描述 PixelGrabber(ImageProducer ip, int x, int y, int w, int h, int[] pix, int off, int scansize)
创建一个PixelGrabber对象,从指定的ImageProducer生成的图像中获取像素的(x,y,w,h)矩形部分到给定的数组中。PixelGrabber(Image img, int x, int y, int w, int h, boolean forceRGB)
创建一个PixelGrabber对象,从指定的图像中获取像素的(x,y,w,h)矩形部分。PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int off, int scansize)
创建一个PixelGrabber对象,将(x,y,w,h)像素的矩形部分从指定的图像进入给定的数组。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
abortGrabbing()
请求PixelGrabber中止图像提取。ColorModel
getColorModel()
获取存储在数组中的像素的ColorModel。int
getHeight()
获取像素缓冲区的高度(调整图像高度后)。Object
getPixels()
获取像素缓冲区。int
getStatus()
返回像素的状态。int
getWidth()
获取像素缓冲区的宽度(调整图像宽度后)。boolean
grabPixels()
请求Image或ImageProducer开始传送像素,并等待感兴趣的矩形中的所有像素被传送。boolean
grabPixels(long ms)
请求Image或ImageProducer开始传送像素,并等待感兴趣的矩形中的所有像素被传送,或者直到指定的超时过去。void
imageComplete(int status)
imageComplete方法是ImageConsumer API的一部分,该类必须实现以检索像素。void
setColorModel(ColorModel model)
setColorModel方法是ImageConsumer API的一部分,该类必须实现此方法来检索像素。void
setDimensions(int width, int height)
setDimensions方法是ImageConsumer API的一部分,该类必须实现这个API来检索像素。void
setHints(int hints)
setHints方法是ImageConsumer API的一部分,该类必须实现这个API来检索像素。void
setPixels(int srcX, int srcY, int srcW, int srcH, ColorModel model, byte[] pixels, int srcOff, int srcScan)
setPixels方法是ImageConsumer API的一部分,该类必须实现以检索像素。void
setPixels(int srcX, int srcY, int srcW, int srcH, ColorModel model, int[] pixels, int srcOff, int srcScan)
setPixels方法是ImageConsumer API的一部分,该类必须实现以检索像素。void
setProperties(Hashtable<?,?> props)
setProperties方法是ImageConsumer API的一部分,该类必须实现以检索像素。void
startGrabbing()
请求PixelGrabber开始获取像素。int
status()
返回像素的状态。
-
-
-
构造方法详细信息
-
PixelGrabber
public PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int off, int scansize)
创建一个PixelGrabber对象,将(x,y,w,h)像素的矩形部分从指定的图像进入给定的数组。 像素存储在默认RGB ColorModel中的数组中。 其中(i,j)中的(i,j)的像素(i,j)的RGB数据在矩形(x,y,w,h)内存储在pix[(j - y) * scansize + (i - x) + off]
的阵列中。- 参数
-
img
- 从中检索像素的图像 -
x
- 从图像中检索的像素矩形左上角的x坐标,相对于图像的默认(未缩放)大小 -
y
- 要从图像中检索的像素矩形的左上角的y坐标 -
w
- 要检索的像素矩形的宽度 -
h
- 要检索的像素矩形的高度 -
pix
- 要用于保存从图像检索的RGB像素的整数数组 -
off
- 将数组的偏移量存储在第一个像素的位置 -
scansize
- 从阵列中的一行像素到下一个像素的距离 - 另请参见:
-
ColorModel.getRGBdefault()
-
PixelGrabber
public PixelGrabber(ImageProducer ip, int x, int y, int w, int h, int[] pix, int off, int scansize)
创建一个PixelGrabber对象,从指定的ImageProducer生成的图像中获取像素的(x,y,w,h)矩形部分到给定的数组中。 像素存储在默认RGB ColorModel中的数组中。 其中(i,j)中的(i,j)的像素(i,j)的RGB数据被存储在矩阵(x,y,w,h)的阵列中,位于pix[(j - y) * scansize + (i - x) + off]
。- 参数
-
ip
- 产生从中检索像素的图像的ImageProducer
-
x
- 从图像中检索的像素矩形左上角的x坐标,相对于图像的默认(未缩放)大小 -
y
- 要从图像中检索的像素矩形的左上角的y坐标 -
w
- 要检索的像素矩形的宽度 -
h
- 要检索的像素矩形的高度 -
pix
- 要用于保存从图像检索的RGB像素的整数数组 -
off
- 将阵列中的偏移量保存在第一个像素的位置 -
scansize
- 从阵列中的一行像素到下一个像素的距离 - 另请参见:
-
ColorModel.getRGBdefault()
-
PixelGrabber
public PixelGrabber(Image img, int x, int y, int w, int h, boolean forceRGB)
创建一个PixelGrabber对象,从指定的图像中获取像素的(x,y,w,h)矩形部分。 如果每次调用setPixels使用相同的ColorModel,则像素将累积在原始ColorModel中,否则像素将累积在默认的RGB ColorModel中。 如果forceRGB参数为true,则像素将累积在默认的RGB ColorModel中。 PixelGrabber分配一个缓冲区,以保持两种情况下的像素。 如果是(w < 0)
或(h < 0)
,那么当传递该信息时,它们将默认为源数据的剩余宽度和高度。- 参数
-
img
- 从中检索图像数据的图像 -
x
- 从图像中检索的像素矩形左上角的x坐标,相对于图像的默认(未缩放)尺寸 -
y
- 要从图像中检索的像素矩形的左上角的y坐标 -
w
- 要检索的像素矩形的宽度 -
h
- 要检索的像素矩形的高度 -
forceRGB
- 如果像素应始终转换为默认的RGB ColorModel,forceRGB
true
-
-
方法详细信息
-
startGrabbing
public void startGrabbing()
请求PixelGrabber开始获取像素。
-
abortGrabbing
public void abortGrabbing()
请求PixelGrabber中止图像提取。
-
grabPixels
public boolean grabPixels() throws InterruptedException
请求Image或ImageProducer开始传送像素,并等待感兴趣的矩形中的所有像素被传送。- 结果
- 如果像素被成功抓住,则为true,在中止,错误或超时时为false
- 异常
-
InterruptedException
- 另一个线程已经中断了这个线程。
-
grabPixels
public boolean grabPixels(long ms) throws InterruptedException
请求Image或ImageProducer开始传送像素,并等待感兴趣的矩形中的所有像素被传送,或者直到指定的超时过去。 此方法的行为方式如下:取决于ms
的值:- 如果
ms == 0
,等待直到所有像素都被传送 - 如果
ms > 0
,等待直到所有像素在超时到期时传递。 - 如果
ms < 0
,返回true
如果所有像素都被抓住了,false
否则并不会等待。
- 参数
-
ms
- 等待图像像素超时前到达的毫秒数 - 结果
- 如果像素被成功抓住,则为true,在中止,错误或超时时为false
- 异常
-
InterruptedException
- 另一个线程已经中断了这个线程。
- 如果
-
getStatus
public int getStatus()
返回像素的状态。 返回表示可用像素信息的ImageObserver标志。- 结果
- 所有相关ImageObserver标志的按位OR
- 另请参见:
-
ImageObserver
-
getWidth
public int getWidth()
获取像素缓冲区的宽度(调整图像宽度后)。 如果没有为要抓取的像素矩形指定宽度,则该信息仅在图像传送维后才可用。- 结果
- 用于像素缓冲区的最终宽度,如果宽度尚未知道则为-1
- 另请参见:
-
getStatus()
-
getHeight
public int getHeight()
获取像素缓冲区的高度(调整图像高度后)。 如果没有为要抓取的像素矩形指定宽度,则该信息仅在图像传送维后才可用。- 结果
- 用于像素缓冲区的最终高度,如果高度尚未知道则为-1
- 另请参见:
-
getStatus()
-
getPixels
public Object getPixels()
获取像素缓冲区。 如果PixelGrabber没有使用显式像素缓冲区来保存像素,那么该方法将返回null,直到图像数据的大小和格式已知。 由于如果源图像使用多个ColorModel传递数据,PixelGrabber可能随时累积默认RGB ColorModel中的数据,否则此方法返回的数组对象可能会随着时间的推移而变化,直到图像抓取完成。
-
getColorModel
public ColorModel getColorModel()
获取存储在数组中的像素的ColorModel。 如果PixelGrabber是使用显式像素缓冲区构建的,那么该方法将始终返回默认的RGB ColorModel,否则返回null,直到ImageProducer使用的ColorModel是已知的。 由于如果源图像使用多个ColorModel传送数据,PixelGrabber可能随时累积默认RGB ColorModel中的数据,因此此方法返回的ColorModel对象可能会随时间而变化,直到图像抓取完成,可能不会反映ImageProducer用于传送像素的任何ColorModel对象。- 结果
- 用于存储像素的ColorModel对象
- 另请参见:
-
getStatus()
,ColorModel.getRGBdefault()
,setColorModel(ColorModel)
-
setDimensions
public void setDimensions(int width, int height)
setDimensions方法是ImageConsumer API的一部分,该类必须实现这个API来检索像素。注意:此方法旨在由图像的ImageProducer调用其像素被抓取。 使用此类从图像中检索像素的开发人员应避免直接调用此方法,因为该操作可能导致检索所请求的像素时出现问题。
- Specified by:
-
setDimensions
在接口ImageConsumer
- 参数
-
width
- 维度的宽度 -
height
- 尺寸的高度
-
setHints
public void setHints(int hints)
setHints方法是ImageConsumer API的一部分,该类必须实现这个API来检索像素。注意:此方法旨在由图像的ImageProducer调用其像素被抓取。 使用此类从图像中检索像素的开发人员应避免直接调用此方法,因为该操作可能导致检索所请求的像素时出现问题。
- Specified by:
-
setHints
在接口ImageConsumer
- 参数
-
hints
- 一组用于处理像素的提示
-
setProperties
public void setProperties(Hashtable<?,?> props)
setProperties方法是ImageConsumer API的一部分,该类必须实现以检索像素。注意:此方法旨在由图像的ImageProducer调用其像素被抓取。 使用此类从图像中检索像素的开发人员应避免直接调用此方法,因为该操作可能导致检索所请求的像素时出现问题。
- Specified by:
-
setProperties
在接口ImageConsumer
- 参数
-
props
- 属性列表
-
setColorModel
public void setColorModel(ColorModel model)
setColorModel方法是ImageConsumer API的一部分,该类必须实现此方法来检索像素。注意:此方法旨在由图像的ImageProducer调用其像素被抓取。 使用此类从图像中检索像素的开发人员应避免直接调用此方法,因为该操作可能导致检索所请求的像素时出现问题。
- Specified by:
-
setColorModel
在接口ImageConsumer
- 参数
-
model
- 指定的ColorModel
- 另请参见:
-
getColorModel()
-
setPixels
public void setPixels(int srcX, int srcY, int srcW, int srcH, ColorModel model, byte[] pixels, int srcOff, int srcScan)
setPixels方法是ImageConsumer API的一部分,该类必须实现以检索像素。注意:此方法旨在由图像的ImageProducer调用其像素被抓取。 使用此类从图像中检索像素的开发人员应避免直接调用此方法,因为该操作可能导致检索所请求的像素时出现问题。
- Specified by:
-
setPixels
在接口ImageConsumer
- 参数
-
srcX
- 要设置的像素区域的左上角的X坐标 -
srcY
- 要设置的像素区域的左上角的Y坐标 -
srcW
- 像素面积的宽度 -
srcH
- 像素面积的高度 -
model
- 指定的ColorModel
-
pixels
- 像素数组 -
srcOff
- 像素数组的偏移量 -
srcScan
- 像素阵列中的一行像素到下一行的距离 - 另请参见:
-
getPixels()
-
setPixels
public void setPixels(int srcX, int srcY, int srcW, int srcH, ColorModel model, int[] pixels, int srcOff, int srcScan)
setPixels方法是ImageConsumer API的一部分,该类必须实现以检索像素。注意:此方法旨在由图像的ImageProducer调用其像素被抓取。 使用此类从图像中检索像素的开发人员应避免直接调用此方法,因为该操作可能导致检索所请求的像素时出现问题。
- Specified by:
-
setPixels
在接口ImageConsumer
- 参数
-
srcX
- 要设置的像素区域的左上角的X坐标 -
srcY
- 要设置的像素区域的左上角的Y坐标 -
srcW
- 像素面积的宽度 -
srcH
- 像素面积的高度 -
model
- 指定的ColorModel
-
pixels
- 像素数组 -
srcOff
- 像素数组的偏移量 -
srcScan
- 像素阵列中一行像素到下一行的距离 - 另请参见:
-
getPixels()
-
imageComplete
public void imageComplete(int status)
imageComplete方法是ImageConsumer API的一部分,该类必须实现以检索像素。注意:此方法旨在由图像的ImageProducer调用其像素被抓取。 使用此类从图像中检索像素的开发人员应避免直接调用此方法,因为该操作可能导致检索所请求的像素时出现问题。
- Specified by:
-
imageComplete
在接口ImageConsumer
- 参数
-
status
- 图像加载的状态 - 另请参见:
-
ImageProducer.removeConsumer(java.awt.image.ImageConsumer)
-
status
public int status()
返回像素的状态。 返回表示可用像素信息的ImageObserver标志。 该方法和getStatus
具有相同的实现,但是getStatus
是首选方法,因为它符合以“getXXX”形式命名信息检索方法的惯例。- 结果
- 所有相关ImageObserver标志的按位OR
- 另请参见:
-
ImageObserver
,getStatus()
-
-