私は入力としてbufferedImageを取り、すべての黒つぶれ色(R < 32、G < 32、B < 32)を黒にマッピングし、他のものを白にマッピングするプログラムを作成しようとしています(OCRエンジンはBufferedImageを入力として使用します)。ピクセルを反復処理せずにそれを行う方法はありますか? はつまり、私はBlackWhiteColorModelがJava BufferedImageのマップカラー
public class BlackWhiteColorModel extends ColorModel {
public BlackWhiteColorModel(int bits) {
super(bits);
}
@Override
public int getRed(int pixel) {
int[] rgb = getRgb(pixel);
if (rgb[0] < 32 && rgb[1] < 32 && rgb[2] < 32) {
return 0;
} else {
return 255;
}
}
@Override
public int getGreen(int pixel) {
int[] rgb = getRgb(pixel);
if (rgb[0] < 32 && rgb[1] < 32 && rgb[2] < 32) {
return 0;
} else {
return 255;
}
}
@Override
public int getBlue(int pixel) {
int[] rgb = getRgb(pixel);
if (rgb[0] < 32 && rgb[1] < 32 && rgb[2] < 32) {
return 0;
} else {
return 255;
}
}
@Override
public int getAlpha(int pixel) {
return pixel;
}
private int[] getRgb(int pixel) {
int r = (pixel) & 0xFF;
int g = (pixel >> 8) & 0xFF;
int b = (pixel >> 16) & 0xFF;
int a = (pixel >> 24) & 0xFF;
return new int[]{r, g, b, a};
}
}
として定義されて
public static BufferedImage BlackAndWhite(BufferedImage image) {
ColorModel model = new BlackWhiteColorModel(DataBuffer.TYPE_INT);
WritableRaster raster = image.getRaster();
BufferedImage newImage = new BufferedImage(model, raster, false, null);
return newImage;
}
を試してみましたが、私はisCompatibleRasterExceptionで終わります。誰かが私に助言をくれますか?
あなたは**ブラック&ホワイトが必要です*です*画像か** GrayScale **のいずれか? – STaefi