Java中BufferedImage的切片,任何分辨率

时间:2018-11-15 17:43:44

标签: java image awt bufferedimage

我有一堂课来分开和加入瓷砖中的形象。当图块的侧面与图像尺寸相对应时,即高度250,图块高度25,效果很好。但是,当图块的侧面与图像尺寸相对应时,它不会在边框处创建较小的图块。

正确地创建小于其余边框的边框会出现什么问题?

构造函数:

public EdgeBufferedImage(BufferedImage image, int w, int h){
    this.sourceImg = image;

    this.setCol((int)Math.ceil(image.getWidth()/(double)w));
    this.setRow((int)Math.ceil(image.getHeight()/(double)h));

    this.setWidth(image.getWidth());
    this.setHeight(image.getHeight());

    this.setTilew(w);
    this.setTileh(h);
    this.setMatImg(new BufferedImage[row][col]);
}

方法: 图像平铺

public void createSmallImages() {

    int rows = getRow();
    int columns = getCol();
    int smallWidth = getTilew();
    int smallHeight = getTileh();

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {

            if (j == columns - 1) smallWidth = getWidth() - (getTilew() * j);           
            if (i == rows - 1) smallHeight = getHeight() - (getTileh() * i);

            matImg[i][j] = getSourceImg().getSubimage(j * smallWidth, i
                    * smallHeight, smallWidth, smallHeight);
        }
        smallWidth = getTilew();
        smallHeight = getTileh();   
    }   
}

图像加入

public void joinTiles(){

    int rows = getRow();
    int columns = getCol();
    int smallWidth = getTilew();
    int smallHeight = getTileh();

    BufferedImage comb = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics2D g = (Graphics2D) comb.getGraphics();

    g.setColor(Color.RED);

    for (int row = 0; row < rows; row++){
        for (int col = 0; col < columns; col++){

            BufferedImage piece = getMatImg()[row][col];

            if (col == columns - 1) smallWidth = getWidth() - (getTilew() * col);           
            if (row == rows - 1) smallHeight = getHeight() - (getTileh() * row);

            g.drawImage(piece, col * smallWidth, row * smallHeight, smallWidth, smallHeight, null);
            g.drawRect(col * smallWidth, row * smallHeight, smallWidth, smallHeight);

        }
        smallWidth = getTilew();
        smallHeight = getTileh();
    }
    g.dispose();

    setSourceImg(comb); 
}

原始图片为512 * 512

Image with whole tiles(256*128)

Image with another tile size (256*100)

0 个答案:

没有答案