我正在尝试根据动态绘制的正方形裁剪图像。为了准确裁剪绘制的正方形,我(在裁剪之前)调整图像大小以适合面板宽度和高度,以便面板上绘制的每个矩形都应与物理图像上相同正方形的点值完全对应。
首先,这种实现方式有问题吗?如果不是,那么尽管有这个调整大小的步骤,结果裁剪的矩形总是“移动”几个(像素?英寸?)对。
我认为由于我使用的图像魔法的命令“调整大小”适用于像素,并且拖动的正方形与屏幕点值一起使用,因此会导致问题。关于如何在它们之间进行转换的任何想法?尽管我真的很努力地用不同的方式来解决它,但我会非常感激。
这是相关代码:
public void resizeImage(int panelW){
int percent;
String sign;
float imgW=img.getWidth(null);
percent=(int) (((panelW-imgW)/imgW)*100);
sign="+resize";
if(panelW <imgW){
percent=(int)(((imgW-panelW)/panelW)*100);
sign="-resize";
}
String command="convert "+imagePath+" "+sign+" "+percent+"% "+imagePath;
//...executeCommand(command) and repaint();
}
在裁剪之前,我也尝试过调整图像大小:
Dimension newImagesize=getScaledDimension(); String command="convert"+imagePath+"-resize"+newImagesize.width+"X"+newImagesize.height+" "+imagePath
其中 getScaledDimension() 取自这里:Java 图像调整大小,保持纵横比
然后我只上传调整大小的图像,它应该具有这样的面板尺寸:
img= new ImageIcon(imgPath).getImage();
repaint();
正如我所说,裁剪后的图像总是有一些像素(?)向右移动,所以我认为我所做的 resizeImage() 测量存在问题,但它对我来说是合乎逻辑的..
裁剪功能使用调整大小:
Rectangle r=resizer.getBounds();
try {
String x="",y="";
if(r.x>0)x="+"+r.x;
if(r.y>0)y="+"+r.y;
cropImage(r.width, r.height, x, y);
并使用裁剪 ImageMagick 命令。