0
아래 코드는 이미지 크기를 8 비트 깊이로 완벽하게 생성합니다. 이미지 파일을 16 32 비트 심도 또는 32 비트 심도에서 if 문이 트리거됩니다. 16 비트 및 32 비트 심도 이미지 나 다른 솔루션을 완벽하게 변환하는 다른 방법이 있습니까?아래 코드는 8 비트 심도 이미지에만 적용됩니다. 8 비트 심도 이상의 이미지를 사용하면 if 문이 발생합니다.
package test;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.Raster;
import java.io.File;
import javax.imageio.ImageIO;
/**
*
* @author sumit
*/
public class Test {
BufferedImage image;
int width;
int height;
public Test() {
try {
File input = new File("abc.png");
image = ImageIO.read(input);
width = image.getWidth();
height = image.getHeight();
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
Color c = new Color(image.getRGB(j, i));
int red = (int) (c.getRed() * 0.299);
int green = (int) (c.getGreen() * 0.587);
int blue = (int) (c.getBlue() * 0.114);
Color newColor = new Color(red + green + blue,
red + green + blue, red + green + blue);
image.setRGB(j, i, newColor.getRGB());
}
}
int widths = image.getWidth();
int heights = image.getHeight();
// Get raw image data
Raster raster = image.getData();
DataBuffer buffer = raster.getDataBuffer();
DataBufferByte byteBuffer = (DataBufferByte) buffer;
byte[] srcData = byteBuffer.getData(0);
if (widths * heights != srcData.length) {
System.err.println("Unexpected image data size. Should be greyscale image");
System.exit(1);
}
File ouptut = new File("grayscale.png");
ImageIO.write(image, "png", ouptut);
} catch (Exception e) {
}
}
static public void main(String args[]) throws Exception {
Test obj = new Test();
}
}
이미지 메타 데이터를 자세히 살펴보십시오. 당신은 그것이 회색조 이미지인지 혼자서 결정할 수 있어야합니다. –
이 [Q & A] (http://stackoverflow.com/q/14358499/230513)의 중복 가능한 두 가지 방법을 비교합니다. – trashgod