2012-06-27 202 views
1

我正在使用Netbeans平臺在Java Swing中製作桌面應用程序。我想將16位灰度圖像轉換爲RGB圖像。我怎樣才能做到這一點?如何將16位灰度圖像轉換爲java中的RGB圖像?

+1

[?你嘗試過什麼(http://mattgemmell.com/2008/12/08 /什麼具備的,你試了/)。 – user1329572

+0

使用['ImageJ'](http://rsbweb.nih.gov/ij/)。 – trashgod

+0

我可以使用LookUp Table將16位Gray_Scale轉換爲RGB嗎?如果是,比如何使用LookUp表進行轉換? – Jay

回答

1

灰度保持單一值黑色,而RBG保持三個紅色藍色和綠色。你可以用這個方法做的最好的是一個單色圖像,你可以用BufferedImage類中的getRGB(x, y)方法做到這一點。由於你的輸入圖像是灰度的,你可以從中選取三個顏色值中的任何一個,因爲它們應該是相同的。然後將該值用於您選擇作爲單色基礎的任何顏色。

下面是一個例子與紅色:

public BufferedImage changeToRedMonochrome(BufferedImage grayImage) 
{ 
    int width = grayImage.getWidth(); 
    int height = grayImage.getHeight() 

    BufferedImage redImage = new BufferedImage(
     width, height, BufferedImage.TYPE_INT_RGB); 

    for (int y=0; y<height; y++) 
    { 
     for (int x=0; x<width; x++) 
     { 
      Color grayColor = new Color(grayImage.getRGB); 
      int gray = grayColor.getRed(); 

      int red = (gray > 127) ? 255 : gray/2; 
      int blue = (gray > 127 ? gray/2 : 0; 
      int green = (gray > 127 ? gray/2 : 0; 

      Color redColor = new Color(red, blue, green); 
      redImage.setRGB(x, y, redColor); 
     } 
    } 
} 

它並不完美的代碼,當然就需要進行調整,以滿足您的特定需求,但是這是你可以做一個單色圖像的一種方法。

+0

redColor變量在您的示例中被忽略......當然,紅色,綠色和藍色組件必須設置爲相同的值,並且希望確切地說,這發生在grayImage.getRGB(x,y)之後(我沒有檢查,但看起來很有希望) – lbalazscs

+0

好點,我很抱歉失蹤。我修復了它。如果您使用類型爲TYPE_BYTE_GRAY的BufferedImage,則默認情況下它應具有相同的顏色值。 – Incompl

+0

如果只設置了紅色,那麼生成的圖像將是黑色和紅色,而不是黑白色......我只會使用grayColor以便生成與輸入圖像相似的圖像。 – lbalazscs

1

Incompl描述的getRGB/setRGB方法應該可以工作。但是,如果我沒有記錯的話,它的表現相當差(這些方法在這種情況下做了很多不必要的工作)。我認爲這將是更快速地繪製新形象,讓Java來優化從BufferedImage.TYPE_USHORT_GRAYBufferedImage.TYPE_INT_RGB轉換:

int width = grayImage.getWidth(); 
int height = grayImage.getHeight() 

BufferedImage newImage = new BufferedImage(
    width, height, BufferedImage.TYPE_INT_RGB); 
Graphics g = newImage.getGraphics(); 
g.drawImage(grayImage, 0, 0, null); 
g.dispose(); 
+0

我可以使用LookUp Table將16位Gray_Scale轉換爲RGB嗎?如果是,比如何使用LookUp表進行轉換? – Jay

相關問題