package org.icepdf.core.pobjects.graphics.RasterOps;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.DataBufferByte;
import java.awt.image.Raster;
import java.awt.image.RasterOp;
import java.awt.image.WritableRaster;
/**
* Applies an algorithm to convert the Gray colour space to RGB.
*
* @since 5.1
*/
public class GrayRasterOp implements RasterOp {
private RenderingHints hints = null;
private float[] decode;
public GrayRasterOp(float[] decode, RenderingHints hints) {
this.hints = hints;
this.decode = decode;
}
public WritableRaster filter(Raster src, WritableRaster dest) {
if (dest == null) dest = src.createCompatibleWritableRaster();
// may have to add some instance of checks
byte[] srcPixels = ((DataBufferByte) src.getDataBuffer()).getData();
byte[] destPixels = ((DataBufferByte) dest.getDataBuffer()).getData();
boolean defaultDecode = 0.0f == decode[0];
int Y;
int bands = src.getNumBands();
for (int pixel = 0; pixel < srcPixels.length; pixel += bands) {
Y = srcPixels[pixel] & 0xff;
Y = defaultDecode ? 255 - Y : Y;
Y = (Y < 0) ? (byte) 0 : (Y > 255) ? (byte) 0xFF : (byte) Y;
destPixels[pixel] = (byte) Y;
}
return dest;
}
public Rectangle2D getBounds2D(Raster src) {
return null;
}
public WritableRaster createCompatibleDestRaster(Raster src) {
return src.createCompatibleWritableRaster();
}
public Point2D getPoint2D(Point2D srcPt, Point2D dstPt) {
if (dstPt == null)
dstPt = (Point2D) srcPt.clone();
else
dstPt.setLocation(srcPt);
return dstPt;
}
public RenderingHints getRenderingHints() {
return hints;
}
}