2012-12-17 247 views
1

我使用NetBeans平臺在Java中製作DesktopApp。在我的應用程序中,我使用了16位,tiff,灰度圖像和對該圖像的處理。現在,我想使用16位,tiff,灰度圖像(或16位圖像的數據)製作32位,tiff,灰度圖像。那麼我怎樣才能將16位圖像轉換爲java中的32位圖像?如何將16位,TIFF,灰度圖像轉換爲32位,TIFF,在Java中的灰度圖像?

+0

你知道,如果你這樣做,你不會得到任何新的數據? –

+1

http://stackoverflow.com/questions/1177059/converting-a-32bpp-image-to-a-16bpp-image-in-java這是儲備轉換 –

+0

@NikolayKuznetsov感謝您的回覆early.Linked給你是爲ARGB圖像,但是im圖像是灰度圖像而不是ARGB或RGB。那麼我怎麼做轉換? – Jay

回答

0

你需要做的是通過一個圖像處理器對象,然後校準它。也許有些事情是這樣的:

import java.awt.*; 
import java.awt.image.*; 
import ij.*; 
import ij.gui.*; 
import ij.measure.*; 

/** converting an ImagePlus object to a different type. */ 
public class ImageConverter { 
    private ImagePlus imp; 
    private int type; 
    private static boolean doScaling = true; 

    /** Construct an ImageConverter based on an ImagePlus object. */ 
    public ImageConverter(ImagePlus imp) { 
     this.imp = imp; 
     type = imp.getType(); 
    } 



    /** Convert your ImagePlus to 32-bit grayscale. */ 
    public void convertToGray32() { 
     if (type==ImagePlus.GRAY32) 
      return; 
     if (!(type==ImagePlus.GRAY8||type==ImagePlus.GRAY16||type==ImagePlus.COLOR_RGB)) 
      throw new IllegalArgumentException("Unsupported conversion"); 
     ImageProcessor ip = imp.getProcessor(); 
     imp.trimProcessor(); 
     Calibration cal = imp.getCalibration(); 
     imp.setProcessor(null, ip.convertToFloat()); 
     imp.setCalibration(cal); //update calibration 
    } 



    /** Set true to scale to 0-255 when converting short to byte or float 
     to byte and to 0-65535 when converting float to short. */ 
    public static void setDoScaling(boolean scaleConversions) { 
     doScaling = scaleConversions; 
     IJ.register(ImageConverter.class); 
    } 

    /** Returns true if scaling is enabled. */ 
    public static boolean getDoScaling() { 
     return doScaling; 
    } 
} 

這樣你的校正圖像被設置爲32位,有史以來輸入可能是什麼。記得要輸入正確的罐子。

+0

感謝回覆me.But我不想使用ImageJ API。我想使用Java的API而不是第三方API。 – Jay

+0

好吧,如果您正在尋找內置的API,那麼請查找BufferedImage類。它所做的是,它將從一個圖像獲取RGB值並將值存儲在另一個圖像中。 BufferedImage類然後爲你做轉換。 –

0

如果您的TIFF加載爲一個BufferedImage,可以減少這樣說:

BufferedImage convert(BufferedImage image) { 

    ColorSpace colorSpace = ColorSpace.getInstance(ColorSpace.CS_GRAY); 

    ColorModel colorModel = new ComponentColorModel(
     colorSpace, false, false, Transparency.OPAQUE, 
     DataBuffer.TYPE_USHORT); 

    BufferedImageOp converter = new ColorConvertOp(colorSpace, null); 
    BufferedImage newImage = 
     converter.createCompatibleDestImage(image, colorModel); 
    converter.filter(image, newImage); 

    return newImage; 
}