我试图获取BufferedImage的subImage,然后使用此subImage替换原始的BufferedImage,以基于用户指定的选择实现缩放功能。但是,当我将subImage重绘到原始图像上时,该子图像的底部未显示。我不知道为什么。我想知道是否有人可以发现任何明显的错误!

private void zoomImage(int x1, int x2, int y1, int y2){
    BufferedImage subImage = originalImage.getSubimage(x1, y1, x2-x1, y2-y1);
    Graphics2D graphics2D = (Graphics2D) originalImage.getGraphics();
    graphics2D.drawImage(subImage, 0, 0, 600, 400, 0,0, x2-x1,y2-y1, null);
    // clean up
    graphics2D.dispose();
}


我还想知道是否有更好的方法来实现对特定矩形选择的放大并使用放大部分来替换原始图像。

最佳答案

应当注意,子图像的大小不应超过原始图像的宽度和高度。
例如,如果originalimage.width=600orignalimage.height=800则可以创建大小为subimage.horizentalorigin+subimage.width<=600subimage.veticalorigin+subimage.height<=800的子图像,否则将始终在图像的角落发现暗阴影。


subimage.horizentalorigin=x1
subimage.verticalorigin=x2
subimage.width=y1
subimage.height=y2在您的情况下尤其如此。


您所做的其余计算因算法而异.....

关于java - 放大BufferedImage的特定部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9967102/

10-10 03:20