64 lines
1.7 KiB
Java
64 lines
1.7 KiB
Java
import java.awt.image.*;
|
|
|
|
// This class implements a gray color model
|
|
// scheme based on another color model. It acts
|
|
// like a gray filter. To compute the amount of
|
|
// gray for a pixel, it takes the max of the red,
|
|
// green, and blue components and uses that value
|
|
// for all three color components.
|
|
|
|
public class GrayModel extends ColorModel
|
|
{
|
|
ColorModel originalModel;
|
|
|
|
public GrayModel(ColorModel originalModel)
|
|
{
|
|
super(originalModel.getPixelSize());
|
|
this.originalModel = originalModel;
|
|
}
|
|
|
|
// The amount of gray is the max of the red, green, and blue
|
|
protected int getGrayLevel(int pixel)
|
|
{
|
|
return Math.max(originalModel.getRed(pixel),
|
|
Math.max(originalModel.getGreen(pixel),
|
|
originalModel.getBlue(pixel)));
|
|
}
|
|
|
|
// Leave the alpha values untouched
|
|
public int getAlpha(int pixel)
|
|
{
|
|
return originalModel.getAlpha(pixel);
|
|
}
|
|
|
|
// Since gray requires red, green and blue to be the same,
|
|
// use the same gray level value for red, green, and blue
|
|
|
|
public int getRed(int pixel)
|
|
{
|
|
return getGrayLevel(pixel);
|
|
}
|
|
|
|
public int getGreen(int pixel)
|
|
{
|
|
return getGrayLevel(pixel);
|
|
}
|
|
|
|
public int getBlue(int pixel)
|
|
{
|
|
return getGrayLevel(pixel);
|
|
}
|
|
|
|
// Normally, this method queries the red, green, blue and
|
|
// alpha values and returns them in the form 0xaarrggbb. To
|
|
// keep from computing the gray level 3 times, we just override
|
|
// this method, get the gray level once, and return it as the
|
|
// red, green, and blue, and add in the original alpha value.
|
|
|
|
public int getRGB(int pixel)
|
|
{
|
|
int gray = getGrayLevel(pixel);
|
|
return (getAlpha(pixel) << 24) + (gray << 16) +
|
|
(gray << 8) + gray;
|
|
}
|
|
} |