簡體   English   中英

如何獲得調整大小的BufferedImage

[英]How to obtain a resized BufferedImage

假設我有2個TIF圖像,並將其中一個讀入BufferedImage實例:

ImageReader reader = ImageIO.getImageReadersByFormatName("tif").next();
reader.setInput(inputStream, false);   // inputStream is the first image.
BufferedImage bufferedImage = reader.read(0);

現在,我想創建一個新的BufferedImage 而不讀取其他圖像 它應該與前一個相同,但大小不同。 對於TIF圖像, imageType似乎為0,但以下操作無效。

BufferedImage largeBufferedImage = new BufferedImage(newWidth, newHeight, 0);

有什么方法可以克隆現有的BufferedImage並僅更改其大小?

順便說一句,我希望能夠對任何圖像格式進行處理。 如果可能的話,我不想處理諸如imageType細節。

BufferedImage deepCopy(BufferedImage bi)/*method to clone BufferedImage*/ {
   ColorModel cm = bi.getColorModel();
   boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
   WritableRaster raster = bi.copyData(null);
   return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
}
BufferedImage newImg = deepCopy(oldImg);//clone it
Graphics2D g = newImg.createGraphics();
g.drawImage(newImg, 0, 0, width, height, null);//newImg will be resized

當您繪制paint方法時,可以添加更多參數來拉伸和縮放圖像,請參閱此鏈接處的g.drawImage

經過一番嘗試和錯誤之后,我找到了解決問題的可行方案。

private BufferedImage copyAndResize(BufferedImage source, int width, int height)
{
    ColorModel cm = source.getColorModel();
    boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
    WritableRaster raster = source.copyData(null);
    SampleModel sm = raster.getSampleModel().createCompatibleSampleModel(width, height);
    WritableRaster newRaster = WritableRaster.createWritableRaster(sm, null);
    BufferedImage newBi = new BufferedImage(cm, newRaster, isAlphaPremultiplied, null);
    return newBi;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM