1

私はJavaで作業しており、2つの画像を結合しています。結合された画像を保存し、オーバーレイを削除したいのですが、まだストリームが開いているようです。そして、どれをどのように閉じるかわかりません。

f_overlayでありf_image、両方ともファイルです。

  // load source images
    BufferedImage image = null;
    BufferedImage overlay = null;
    try {
        log.debug(f_image.getAbsolutePath());
        log.debug(f_overlay.getAbsolutePath());
        image = ImageIO.read(f_image);
        overlay = ImageIO.read(f_overlay);
    } catch (IOException e) {
        log.error(e.getMessage());
    }

     // create the new image, canvas size is the max. of both image sizes
    int w = Math.max(image.getWidth(), overlay.getWidth());
    int h = Math.max(image.getHeight(), overlay.getHeight());
    BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

    // paint both images, preserving the alpha channels
    Graphics g = combined.getGraphics();
    g.drawImage(image, 0, 0, null);
    g.drawImage(overlay, 0, 0, null);

    // Save as new image
    try {
        ImageIO.write(combined, "PNG", f_image);
    } catch (IOException e) {
        log.error(e.getMessage());
    }

    // we can delete the overlay now
    log.debug("Delete overlay: " + f_overlay.delete());

何か提案はありますか?

4

1 に答える 1

0

あなたのコードには何も問題はありません。

ただし、読み取りが成功した場合にのみ、ファイル f_overlay を削除します。重要なのは、ファイル オブジェクトで delete() を呼び出した後は、そのオブジェクトを他の目的で使用してはならないため、f_overlay=null を割り当てるのが最善の方法です。

boolean state = f_overlay.delete();
f_overlay=null;
log.debug("Delete ... "+state);
于 2013-10-08T15:01:16.713 に答える