2016-12-09 50 views
0

我想將我的圖片從彩色轉換爲黑白圖像,似乎是從頭開始創建的。 這是因爲在不同的崗位描述,我試過代碼:使用從頭開始創建的java將彩色圖像轉換爲黑色和白色

BufferedImage bi = ImageIO.read(new File("/Users/***/Documents/Photograph.jpg")); 
    ColorConvertOp op = 
     new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
    ImageIO.write(bi, "PNG", new File("/Users/bng/Documents/rendered2.png")); 
    op.filter(bi, bi); 

但是還是我的圖像不轉換爲黑色和白色。此外,此代碼將render2.png圖像大小增加到10倍。 另外,如果我能找到一些Java 8的方式,這將是非常好的。 有什麼建議嗎?

+0

我想對你想要的結果更具體。黑白圖像只有兩種顏色,也稱爲二值圖像。灰度圖像(您嘗試使用ColorSpace.CS_GRAY創建)具有比兩個顏色更多的顏色 – Mathias

回答

0
  1. 你必須找到你想改變圖像的現有顏色的RGB。
  2. 據透露,要改變它作爲白色RGB值(255,255,255)和黑色的RGB值爲(0,0,0)

  3. 以下方法很容易做到的顏色變化,如果你申請的正確方法您的要求

    private BufferedImage changeColor(BufferedImage image, int srcColor, int replaceColor) 
    { 
        BufferedImage destImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 
        Graphics2D g = destImage.createGraphics(); 
        g.drawImage(image, null, 0, 0); 
        g.dispose(); 
    
    
        for (int width = 0; width < image.getWidth(); width++) 
        { 
         for (int height = 0; height < image.getHeight(); height++) 
         { 
    
          if (destImage.getRGB(width, height) == srcColor) 
          { 
           destImage.setRGB(width, height, replaceColor); 
          } 
    
         } 
        } 
    
        return destImage; 
    } 
    
+0

這將圖像更改爲黑白圖像,但不會將其從頭開始製作。 – KayV

+0

你必須創建圖像,在線檢查多個可用的源。 –

0

你必須以適當的方式使用ColorConvertOp

  1. 創建來源圖像
  2. 應用濾波器
  3. 節省DEST

例如:

BufferedImage src = ImageIO.read(new File("/Users/***/Documents/Photograph.jpg")); 

ColorConvertOp op = 
    new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
BufferedImage dest = op.filter(src, null); 

ImageIO.write(dest, "PNG", new File("/Users/bng/Documents/rendered2.png")); 

SRC: enter image description here

DEST: enter image description here

+1

如果你喜歡**單行**,你可以做'ImageIO.write(ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY),null).filter(ImageIO.read(new File(「/ Users/*** /Documents/Photograph.jpg「)),null),」PNG「,新文件(」/ Users/bng/Documents/rendered2.png「));' –

+0

你的一個班輪很好。以某種方式不會將圖像轉換爲從頭開始。尋找其他選項。 – KayV

+1

'ColorSpace.CS_GRAY'確實會創建**灰度**圖像而不是**黑白**圖像... –

0

這裏是代碼瓦特爲我操作:

BufferedImage input = ImageIO.read(new File("/Users/bng/Documents/Photograph.jpg")); 
    // Create a black-and-white image of the same size. 
    BufferedImage im = new BufferedImage(input.getWidth(), input.getHeight(), BufferedImage.TYPE_BYTE_BINARY); 
    // Get the graphics context for the black-and-white image. 
    Graphics2D g2d = im.createGraphics(); 
    // Render the input image on it. 
    g2d.drawImage(input, 0, 0, null); 
    // Store the resulting image using the PNG format. 
    ImageIO.write(im, "PNG", new File("/Users/bng/Documents/rendered.png")); 

這是BufferedImage.TYPE_BYTE_BINARY,它爲我提供了確切的解決方案。針對上述代碼的Java 8版本的Lokking。

+0

這是如何創建一個灰度(黑/白)圖像? –

+0

它是TYPE_BYTE_BINARY,它給出它的黑白顏色,如指定的「nt java.awt.image.BufferedImage。TYPE_BYTE_BINARY = 12 [0xc] 表示不透明的字節打包的1,2或4位圖像。圖像有一個沒有alpha的IndexColorModel。當此類型用作具有imageType參數但不包含ColorModel參數的BufferedImage構造函數的imageType參數時,將使用默認sRGB ColorSpace中的兩種顏色IndexColorModel創建一個1位圖像:{0,0,0}和{255,255,255}。「 – KayV

+0

呃 - 沒有冒犯,抱歉,並不意味着粗魯.... –

相關問題