63 lines
2.4 KiB
Java
63 lines
2.4 KiB
Java
package stirling.software.SPDF.utils;
|
|
|
|
import java.awt.image.BufferedImage;
|
|
import java.awt.image.DataBuffer;
|
|
import java.awt.image.DataBufferByte;
|
|
import java.awt.image.DataBufferInt;
|
|
import java.nio.ByteBuffer;
|
|
|
|
public class ImageProcessingUtils {
|
|
|
|
static BufferedImage convertColorType(BufferedImage sourceImage, String colorType) {
|
|
BufferedImage convertedImage;
|
|
switch (colorType) {
|
|
case "greyscale":
|
|
convertedImage =
|
|
new BufferedImage(
|
|
sourceImage.getWidth(),
|
|
sourceImage.getHeight(),
|
|
BufferedImage.TYPE_BYTE_GRAY);
|
|
convertedImage.getGraphics().drawImage(sourceImage, 0, 0, null);
|
|
break;
|
|
case "blackwhite":
|
|
convertedImage =
|
|
new BufferedImage(
|
|
sourceImage.getWidth(),
|
|
sourceImage.getHeight(),
|
|
BufferedImage.TYPE_BYTE_BINARY);
|
|
convertedImage.getGraphics().drawImage(sourceImage, 0, 0, null);
|
|
break;
|
|
default: // full color
|
|
convertedImage = sourceImage;
|
|
break;
|
|
}
|
|
return convertedImage;
|
|
}
|
|
|
|
public static byte[] getImageData(BufferedImage image) {
|
|
DataBuffer dataBuffer = image.getRaster().getDataBuffer();
|
|
if (dataBuffer instanceof DataBufferByte) {
|
|
return ((DataBufferByte) dataBuffer).getData();
|
|
} else if (dataBuffer instanceof DataBufferInt) {
|
|
int[] intData = ((DataBufferInt) dataBuffer).getData();
|
|
ByteBuffer byteBuffer = ByteBuffer.allocate(intData.length * 4);
|
|
byteBuffer.asIntBuffer().put(intData);
|
|
return byteBuffer.array();
|
|
} else {
|
|
int width = image.getWidth();
|
|
int height = image.getHeight();
|
|
byte[] data = new byte[width * height * 3];
|
|
int index = 0;
|
|
for (int y = 0; y < height; y++) {
|
|
for (int x = 0; x < width; x++) {
|
|
int rgb = image.getRGB(x, y);
|
|
data[index++] = (byte) ((rgb >> 16) & 0xFF); // Red
|
|
data[index++] = (byte) ((rgb >> 8) & 0xFF); // Green
|
|
data[index++] = (byte) (rgb & 0xFF); // Blue
|
|
}
|
|
}
|
|
return data;
|
|
}
|
|
}
|
|
}
|