下面列出了怎么用java.awt.image.ColorConvertOp的API类实例代码及写法,或者点击链接到github查看源代码。
static boolean testImage(int type, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testImage(int dataType, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testSubImage(int x0, int y0, int dx, int dy,
int dataType, int rBits, int gBits,
int bBits, int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(subSrc, subDst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testSubImage(int x0, int y0, int dx, int dy, int type,
int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(subSrc, subDst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
public static void main(String[] args) {
ICC_Profile pSRGB = ICC_Profile.getInstance(CS_sRGB);
byte[] raw_data = pSRGB.getData();
setRenderingIntent(0x1000000, raw_data);
ICC_Profile p = ICC_Profile.getInstance(raw_data);
ICC_ColorSpace cs = new ICC_ColorSpace(p);
// perfrom test color conversion
ColorConvertOp op = new ColorConvertOp(cs,
ColorSpace.getInstance(CS_sRGB), null);
BufferedImage src = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
BufferedImage dst = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
try {
op.filter(src.getRaster(), dst.getRaster());
} catch (CMMException e) {
throw new RuntimeException("Test failed.", e);
}
System.out.println("Test passed.");
}
public static void main(String[] args) {
ICC_Profile pSRGB = ICC_Profile.getInstance(CS_sRGB);
byte[] raw_data = pSRGB.getData();
setRenderingIntent(0x1000000, raw_data);
ICC_Profile p = ICC_Profile.getInstance(raw_data);
ICC_ColorSpace cs = new ICC_ColorSpace(p);
// perfrom test color conversion
ColorConvertOp op = new ColorConvertOp(cs,
ColorSpace.getInstance(CS_sRGB), null);
BufferedImage src = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
BufferedImage dst = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
try {
op.filter(src.getRaster(), dst.getRaster());
} catch (CMMException e) {
throw new RuntimeException("Test failed.", e);
}
System.out.println("Test passed.");
}
/**
* Returns the (A)RGB equivalent of the given raster, using the given AWT color space to perform the conversion.
*
* @param raster the source raster
* @param colorSpace the AWT
* @return an (A)RGB buffered image
*/
protected BufferedImage toRGBImageAWT(WritableRaster raster, ColorSpace colorSpace)
{
//
// WARNING: this method is performance sensitive, modify with care!
//
// ICC Profile color transforms are only fast when performed using ColorConvertOp
ColorModel colorModel = new ComponentColorModel(colorSpace, false, false,
Transparency.OPAQUE, raster.getDataBuffer().getDataType());
BufferedImage src = new BufferedImage(colorModel, raster, false, null);
BufferedImage dest = new BufferedImage(raster.getWidth(), raster.getHeight(),
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dest);
return dest;
}
static boolean testImage(int dataType, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
/**
* Converts the source to 1-bit colour depth (monochrome).
* No transparency.
* @param src the source image to convert
* @return a copy of the source image with a 1-bit colour depth.
*/
public static BufferedImage convert1(BufferedImage src) {
IndexColorModel icm = new IndexColorModel(
1, 2, new byte[] { (byte) 0, (byte) 0xFF },
new byte[] { (byte) 0, (byte) 0xFF },
new byte[] { (byte) 0, (byte) 0xFF }
);
BufferedImage dest = new BufferedImage(
src.getWidth(), src.getHeight(),
BufferedImage.TYPE_BYTE_BINARY,
icm
);
ColorConvertOp cco = new ColorConvertOp(
src.getColorModel().getColorSpace(),
dest.getColorModel().getColorSpace(),
null
);
cco.filter(src, dest);
return dest;
}
public BufferedImage convertToColorSpace(final BufferedImage bi, final ColorSpace to) {
final ColorSpace from = bi.getColorModel().getColorSpace();
final RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
hints.put(RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
hints.put(RenderingHints.KEY_DITHERING,
RenderingHints.VALUE_DITHER_ENABLE);
final ColorConvertOp op = new ColorConvertOp(from, to, hints);
BufferedImage result = op.filter(bi, null);
result = relabelColorSpace(result, to);
return result;
}
public static void main(String[] args) {
ICC_Profile pSRGB = ICC_Profile.getInstance(CS_sRGB);
byte[] raw_data = pSRGB.getData();
setRenderingIntent(0x1000000, raw_data);
ICC_Profile p = ICC_Profile.getInstance(raw_data);
ICC_ColorSpace cs = new ICC_ColorSpace(p);
// perfrom test color conversion
ColorConvertOp op = new ColorConvertOp(cs,
ColorSpace.getInstance(CS_sRGB), null);
BufferedImage src = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
BufferedImage dst = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
try {
op.filter(src.getRaster(), dst.getRaster());
} catch (CMMException e) {
throw new RuntimeException("Test failed.", e);
}
System.out.println("Test passed.");
}
static boolean testImage(int type, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testSubImage(int x0, int y0, int dx, int dy, int type,
int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(subSrc, subDst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testSubImage(int x0, int y0, int dx, int dy,
int dataType, int rBits, int gBits,
int bBits, int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(subSrc, subDst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
/**
* Returns the (A)RGB equivalent of the given raster, using the given AWT color space
* to perform the conversion.
* @param raster the source raster
* @param colorSpace the AWT
* @return an (A)RGB buffered image
*/
protected BufferedImage toRGBImageAWT(WritableRaster raster, ColorSpace colorSpace)
{
//
// WARNING: this method is performance sensitive, modify with care!
//
// ICC Profile color transforms are only fast when performed using ColorConvertOp
ColorModel colorModel = new ComponentColorModel(colorSpace,
false, false, Transparency.OPAQUE, raster.getDataBuffer().getDataType());
BufferedImage src = new BufferedImage(colorModel, raster, false, null);
BufferedImage dest = new BufferedImage(raster.getWidth(), raster.getHeight(),
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dest);
return dest;
}
static boolean testImage(int dataType, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
private static BufferedImage getColorImage(BufferedImage image)
{
if (!image.getColorModel().hasAlpha())
{
return image;
}
if (image.getColorModel().getColorSpace().getType() != ColorSpace.TYPE_RGB)
{
throw new UnsupportedOperationException("only RGB color spaces are implemented");
}
// create an RGB image without alpha
// BEWARE: the previous solution in the history
// g.setComposite(AlphaComposite.Src) and g.drawImage()
// didn't work properly for TYPE_4BYTE_ABGR.
// alpha values of 0 result in a black dest pixel!!!
BufferedImage rgbImage = new BufferedImage(image.getWidth(), image.getHeight(),
BufferedImage.TYPE_3BYTE_BGR);
return new ColorConvertOp(null).filter(image, rgbImage);
}
static boolean testSubImage(int x0, int y0, int dx, int dy, int type,
int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(subSrc, subDst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testImage(int type, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
public static void main(String[] args) {
ICC_Profile pSRGB = ICC_Profile.getInstance(CS_sRGB);
byte[] raw_data = pSRGB.getData();
setRenderingIntent(0x1000000, raw_data);
ICC_Profile p = ICC_Profile.getInstance(raw_data);
ICC_ColorSpace cs = new ICC_ColorSpace(p);
// perfrom test color conversion
ColorConvertOp op = new ColorConvertOp(cs,
ColorSpace.getInstance(CS_sRGB), null);
BufferedImage src = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
BufferedImage dst = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
try {
op.filter(src.getRaster(), dst.getRaster());
} catch (CMMException e) {
throw new RuntimeException("Test failed.", e);
}
System.out.println("Test passed.");
}
static boolean testSubImage(int x0, int y0, int dx, int dy, int type,
int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(subSrc, subDst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testImage(int type, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
public static void RGB2CMYK(ICC_ColorSpace cmykColorSpace, int[] rgb, float[][] C, float[][] M, float[][] Y, float[][] K, int imageWidth, int imageHeight) {
DataBuffer db = new DataBufferInt(rgb, rgb.length);
WritableRaster raster = Raster.createPackedRaster(db, imageWidth, imageHeight, imageWidth, new int[] {0x00ff0000, 0x0000ff00, 0x000000ff}, null);
ColorSpace sRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorConvertOp cco = new ColorConvertOp(sRGB, cmykColorSpace, null);
BufferedImage rgbImage = new BufferedImage(new DirectColorModel(24, 0x00ff0000, 0x0000ff00, 0x000000ff), raster, false, null);
BufferedImage cmykImage = cco.filter(rgbImage, null);
WritableRaster cmykRaster = cmykImage.getRaster();
byte[] cmyk = (byte[])cmykRaster.getDataElements(0, 0, imageWidth, imageHeight, null);
for(int i = 0, index = 0; i < imageHeight; i++) {
for(int j = 0; j < imageWidth; j++) {
C[i][j] = (cmyk[index++]&0xff) - 128.0f;
M[i][j] = (cmyk[index++]&0xff) - 128.0f;
Y[i][j] = (cmyk[index++]&0xff) - 128.0f;
K[i][j] = (cmyk[index++]&0xff) - 128.0f;
}
}
}
static boolean testImage(int dataType, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
static boolean testSubImage(int x0, int y0, int dx, int dy,
int dataType, int rBits, int gBits,
int bBits, int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(subSrc, subDst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
public static void main(String[] args) {
ICC_Profile pSRGB = ICC_Profile.getInstance(CS_sRGB);
byte[] raw_data = pSRGB.getData();
setRenderingIntent(0x1000000, raw_data);
ICC_Profile p = ICC_Profile.getInstance(raw_data);
ICC_ColorSpace cs = new ICC_ColorSpace(p);
// perfrom test color conversion
ColorConvertOp op = new ColorConvertOp(cs,
ColorSpace.getInstance(CS_sRGB), null);
BufferedImage src = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
BufferedImage dst = new BufferedImage(1, 1, TYPE_3BYTE_BGR);
try {
op.filter(src.getRaster(), dst.getRaster());
} catch (CMMException e) {
throw new RuntimeException("Test failed.", e);
}
System.out.println("Test passed.");
}
static boolean testImage(int type, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createDCMImage(type, cs);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
private static BufferedImage getColorImage(BufferedImage image)
{
if (!image.getColorModel().hasAlpha())
{
return image;
}
if (image.getColorModel().getColorSpace().getType() != ColorSpace.TYPE_RGB)
{
throw new UnsupportedOperationException("only RGB color spaces are implemented");
}
// create an RGB image without alpha
//BEWARE: the previous solution in the history
// g.setComposite(AlphaComposite.Src) and g.drawImage()
// didn't work properly for TYPE_4BYTE_ABGR.
// alpha values of 0 result in a black dest pixel!!!
BufferedImage rgbImage = new BufferedImage(
image.getWidth(),
image.getHeight(),
BufferedImage.TYPE_3BYTE_BGR);
return new ColorConvertOp(null).filter(image, rgbImage);
}
static boolean testImage(int dataType, int rBits, int gBits, int bBits,
int cs, BufferedImage gldImage,
double accuracy)
{
BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
BufferedImage dst = ImageFactory.createDstImage(
BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(src, dst);
ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits,
bBits);
boolean result = cmp.compare(gldImage, dst);
if (!result) {
System.err.println(cmp.getStat());
}
return result;
}
@Override
protected Icon getIcon ()
{
// TODO Use that to get the state (-> highlight or not)
TransitionAwareUI transitionAwareUI = (TransitionAwareUI) slider.getUI();
StateTransitionTracker stateTransitionTracker = transitionAwareUI.getTransitionTracker();
// stateTransitionTracker.getModelStateInfo().getCurrModelState();
final Icon icon = super.getIcon();
final BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
final Graphics iconGraphics = image.createGraphics();
icon.paintIcon(slider, iconGraphics, 0, 0);
// Make it brighter (very simple approach)
final RescaleOp rescaleOp = new RescaleOp(2.0f, 50, null);
rescaleOp.filter(image, image);
ColorConvertOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
op.filter(image, image);
return new ImageIcon(image);
}