我正在尝试将图像转换为仅黑白(不是灰度).
我用过这个:
BufferedImage blackAndWhiteImage = new BufferedImage(
dWidth.intValue(),
dHeight.intValue(),
BufferedImage.TYPE_BYTE_BINARY);
Graphics2D graphics = blackAndWhiteImage.createGraphics();
graphics.drawImage(colourImage, 0, 0, null);
return blackAndWhiteImage;
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到我决定尝试更亮的颜色,例如Google徽标:
它出来了:
然后我首先尝试通过槽灰度使用:
BufferedImage blackAndWhiteImage2 = new BufferedImage(
dWidth.intValue(),
dHeight.intValue(),
BufferedImage.TYPE_USHORT_GRAY);
Run Code Online (Sandbox Code Playgroud)
并且它似乎保存了蓝色,但不是最亮的(在这种情况下是黄色),并且您可能会看到它的质量下降:
任何建议都非常感谢; 我相信我所追求的是将每种颜色转换为黑色,除了白色(这将是背景颜色),这已经在应用TYPE_BYTE_BINARY去除alpha通道时完成.
编辑: 也许我没有解释清楚:
**1 - 在某些情况下,图像实际上是白色的黑色...这很烦人(whiteOnBlackExample),因为它使这个过程变得复杂很多,我将在稍后介绍,现在优先考虑转换"正常"图像.
我做的是,首先剥离alpha通道(如果它存在) - >因此将alpha通道转换为白色; 然后将每个其他颜色转换为黑色