HTML のような画像敷き詰めをするメソッド

– ゲームを作っていると背景などで同じ画像をタイル状に張る処理をよくやるのでメソッド化してみた。なかなか便利。とりあえず DoJa 用だが、ImageObserver を渡してやる部分をくっつければすぐに AWT 用に移植できるはず。

    /**
     * イメージを指定範囲に敷き詰める.
     *
     * @see Graphics#drawImage(com.nttdocomo.ui.Image, int, int)
     * @see Graphics#fillRect(int, int, int, int)
     *
     * @param g 敷き詰め先
     * @param img 敷き詰める画像
     * @param x 敷き詰め先左上 X 座標
     * @param y 敷き詰め先左上 Y 座標
     * @param w 敷き詰め先の幅
     * @param h 敷き詰め先の高さ
     * @author hiro.I
     * @since 2005-10-20 18:12:31
     */
    public static final void fillImage(Graphics g, Image img, int x, int y,
            int w, int h) {
        final boolean bHasHorizonalFraction = w % img.getWidth() > 0;
        final boolean bHasVerticalFraction = h % img.getHeight() > 0;
        final int COLS = w / img.getWidth() + (bHasHorizonalFraction ? 1 : 0);
        final int ROWS = h / img.getHeight() + (bHasVerticalFraction ? 1 : 0);
        for (int i = 0; i < ROWS; i++) {
            final int ty = y + i * img.getHeight();
            final int th = (i == ROWS – 1 && bHasVerticalFraction ? h
                    % img.getHeight() : img.getHeight());
            for (int k = 0; k < COLS; k++) {
                final int tx = x + k * img.getWidth();
                final int tw = (k == COLS – 1 && bHasHorizonalFraction ? w
                        % img.getWidth() : img.getWidth());
                g.drawImage(img, tx, ty, 0, 0, tw, th);
            }
        }

    }