動的に描画された正方形に従って画像をトリミングしようとしています。描画された正方形を正確にトリミングするために、(トリミングする前に) パネルの幅と高さに合わせて画像のサイズを変更し、パネルに描画されたすべての長方形が物理画像の同じ正方形のポイント値に正確に対応するようにします。
まず、この実装方法に問題はありますか? いいえの場合、このサイズ変更手順にもかかわらず、結果として得られるトリミングされた四角形は常に数 (ピクセル? インチ?) 右に「移動」されます。
私が使用するイメージマジックのコマンド「サイズ変更」はピクセルで動作し、画面のポイント値でドラッグされた正方形が問題を引き起こすと思います。それらの間の変換をどのように行うかについてのアイデアはありますか? 私は本当に感謝していますが、さまざまな方法でそれを愛するのに本当に苦労しました.
関連するコードは次のとおりです。
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 コマンドを使用します。