次の手順で学習していきます。
入力画像、処理する画像パスを指定
ユーザーがトリミングする部分をドラッグ アンド ドロップできるようにします。
選択後、Robot クラスを使用してクリップされた部分の座標を決定します。
選択した画像を切り取って保持する
次にコーディング部分を開始します。
リスト1: 導入されたクラス
次のようにコードをコピーします。
java.awt.Graphicsをインポートします。
java.awt.Rectangle をインポートします。
java.awt.Robotをインポートします。
インポート java.awt.event.MouseEvent;
インポート java.awt.event.MouseListener;
インポート java.awt.event.MouseMotionListener;
インポート java.awt.image.BufferedImage;
java.io.ファイルをインポートします。
インポートjavax.imageio.ImageIO;
javax.swing.JFrameをインポートします。
例証します:
Graphics クラスには、四角形を描画するためのメソッドが含まれています
クリッピング用のドラッグされた長方形領域として Rectangle クラスを使用します。
ロボット クラスはスクリーンショットのキャプチャに使用されます
マウスリスナーを使用してマウスのドラッグ時間を取得する
Robot クラスは画像処理に BufferedImage を使用します
ファイルクラスは画像ファイルを開くために使用されます
ImageIO クラスは、画像を png または jpg 画像ファイルに書き込むために使用されます
インターフェースの表示にはJFrameが使用されます
次に、メインメソッドを含むエントリクラスを作成します。
リスト2: エントリークラス
次のようにコードをコピーします。
public class CropImage extends JFrame 実装 MouseListener、MouseMotionListener
{
int ドラッグ_ステータス=0,c1,c2,c3,c4;
public static void main(String args[])
{
新しい CropImage().start();
}
例証します:
CropImage というクラスを作成しました
このクラスは JFrame を拡張して、フレームのすべての機能を実装します。
ユーザーがマウス ポインターのドラッグを開始したときを知るためのさまざまなマウス イベント リスナーを実装しました。
rag_status 変数は、ドラッグ開始時のマウスの座標を保存するために使用されます。
start メソッドを呼び出す main メソッドを定義します。これについては以下で定義します。
次に起動方法です
リスト 2
次のようにコードをコピーします。
public void start()
{
ImagePanel im=new ImagePanel("F://壁紙//壁紙//1.jpg");
追加(im);
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
例証します:
処理対象の画像をパラメータとして使用して、ImagePanel というクラスを定義します。
ImagePanel を配置して JFrame に画像を表示し、マウス イベントのリッスンを開始します。
次に、マウスイベントを処理するメソッドを定義します。
リスト 3: マウス イベント ハンドラー
次のようにコードをコピーします。
@オーバーライド
public void MouseClicked(MouseEvent arg0) {
}
@オーバーライド
public void MouseEntered(MouseEvent arg0) {
}
@オーバーライド
public void MouseExited(MouseEvent arg0) {
}
@オーバーライド
public void MousePressed(MouseEvent arg0) {
リペイント();
c1=arg0.getX();
c2=arg0.getY();
}
@オーバーライド
パブリック void マウスリリース(MouseEvent arg0) {
リペイント();
if(ドラッグステータス==1)
{
c3=arg0.getX();
c4=arg0.getY();
試す
{
ドラッグされた画面();
}
catch(例外 e)
{
e.printStackTrace();
}
}
}
@オーバーライド
public void MouseDragged(MouseEvent arg0) {
リペイント();
ドラッグステータス=1;
c3=arg0.getX();
c4=arg0.getY();
}
@オーバーライド
public void MouseMoved(MouseEvent arg0) {
}
パブリックボイドペイント(グラフィックスg)
{
スーパーペイント(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
例証します:
マウスが押されたときに現在の座標を c1 と c2 に保存します
マウスが押されてドラッグが開始されると、ドラッグ ステータス変数 drag_status を true に設定します。
マウス ボタンを放すと、画像のトリミング領域が選択されたことを意味し、draggscreen メソッドが呼び出されます。
ペイント メソッドは、ドラッグ時に四角形を表示するために使用され、現在の座標と最初に記録された座標を使用して四角形を描画します。
以下は、draggscreen メソッドのコードです。
次のようにコードをコピーします。
リスト 4: draggedScreen メソッド
public voidraggedScreen()throws 例外
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
ロボット robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
ファイル保存パス=新しいファイル("画面1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("トリミングされた画像は正常に保存されました。");
}}
例証します:
まず画像の高さと幅を計算します
Robot クラスを使用して、トリミングされた領域のスクリーンショットを撮り、別のファイル screen1.jpg に保存します。
完全なコード
次のようにコードをコピーします。
リスト 5: ImagePanel.java
java.awt.Dimensionをインポートします。
java.awt.Graphicsをインポートします。
java.awt.Imageをインポートします。
インポート javax.swing.ImageIcon;
javax.swing.JPanelをインポートします。
class ImagePanel extends JPanel {
プライベート画像 img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(画像画像) {
this.img = 画像;
寸法サイズ = 新しい Dimension(img.getWidth(null), img.getHeight(null));
// ディメンションのサイズ = new Dimension(10,10);
setPreferredSize(サイズ);
setMinimumSize(サイズ);
set最大サイズ(サイズ);
setSize(サイズ);
setLayout(null);
}
public voidPaintComponent(グラフィックス g) {
g.drawImage(img, 0, 0, null);
}
}
リスト 6:CropImage.java
java.awt.Graphicsをインポートします。
java.awt.Rectangle をインポートします。
java.awt.Robotをインポートします。
インポート java.awt.event.MouseEvent;
インポート java.awt.event.MouseListener;
インポート java.awt.event.MouseMotionListener;
インポート java.awt.image.BufferedImage;
java.io.ファイルをインポートします。
インポートjavax.imageio.ImageIO;
javax.swing.JFrameをインポートします。
public class CropImage extends JFrame 実装 MouseListener、MouseMotionListener
{
int ドラッグ_ステータス=0,c1,c2,c3,c4;
public static void main(String args[])
{
新しい CropImage().start();
}
public void start()
{
ImagePanel im=new ImagePanel("F://壁紙//壁紙//1.jpg");
追加(im);
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public voidraggedScreen()throws 例外
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
ロボット robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
ファイル保存パス=新しいファイル("画面1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("トリミングされた画像は正常に保存されました。");
}
@オーバーライド
public void MouseClicked(MouseEvent arg0) {
}
@オーバーライド
public void MouseEntered(MouseEvent arg0) {
}
@オーバーライド
public void MouseExited(MouseEvent arg0) {
}
@オーバーライド
public void MousePressed(MouseEvent arg0) {
リペイント();
c1=arg0.getX();
c2=arg0.getY();
}
@オーバーライド
パブリック void マウスリリース(MouseEvent arg0) {
リペイント();
if(ドラッグステータス==1)
{
c3=arg0.getX();
c4=arg0.getY();
試す
{
ドラッグされた画面();
}
catch(例外 e)
{
e.printStackTrace();
}
}
}
@オーバーライド
public void MouseDragged(MouseEvent arg0) {
リペイント();
ドラッグステータス=1;
c3=arg0.getX();
c4=arg0.getY();
}
@オーバーライド
public void MouseMoved(MouseEvent arg0) {
}
パブリックボイドペイント(グラフィックスg)
{
スーパーペイント(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}