首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不丢失图像纵横比的情况下将图像放入形状中?

如何在不丢失图像纵横比的情况下将图像放入形状中?
EN

Stack Overflow用户
提问于 2021-05-20 01:51:57
回答 1查看 57关注 0票数 1

我想从电脑上拾取图像并将其拟合成一个圆圈( JavaFX ),但它一直将纵横比更改为1:1,我不知道该怎么办,也许还有另一种方法可以做到,但我不太了解JavaFX,我在这里找不到其他任何东西。

对于宽高比为4:3的this图像,它将宽高比更改为1:1 (this)

下面是"onClick“方法的代码:

代码语言:javascript
复制
@FXML
public void handleUploadImage(MouseEvent event) {
    FileChooser fileChooser = new FileChooser();

    //Extensiones soportadas de imagen
    FileChooser.ExtensionFilter extFilterjpg
            = new FileChooser.ExtensionFilter("jpg files (*.jpg)", "*.jpg");
    FileChooser.ExtensionFilter extFilterpng
            = new FileChooser.ExtensionFilter("png files (*.png)", "*.png");
    FileChooser.ExtensionFilter extFilterjpeg
            = new FileChooser.ExtensionFilter("jpeg files (*.jpeg)", "*.jpeg");

    fileChooser.getExtensionFilters().addAll(extFilterjpg, extFilterpng, extFilterjpeg);
    //Menu de seleccion de imagen
    File file = fileChooser.showOpenDialog(null);

    Image image  = new Image(file.toURI().toString());
    circleImage.setFill(new ImagePattern(image, circleImage.getCenterX()-circleImage.getRadius(), circleImage.getCenterY()-circleImage.getRadius(), 2*circleImage.getRadius(), 2*circleImage.getRadius(), false)); //circleImage.setFill(new ImagePattern(image)); -> do the exact same thing
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-20 09:25:16

我看到了两个解决方案,可能并不像你想象的那么简单。

1-首先创建一个正方形的居中图像

代码语言:javascript
复制
Image square(Image img) {
    if (img.getHeight() == img.getWidth()) {
        return img;
    }
    // Smallest length
    int size = (int) (img.getWidth() > img.getHeight() ? img.getHeight() : img.getWidth());
    // left shift
    int x = ((int) img.getWidth() - size) / 2;
    // top shift
    int y = ((int) img.getHeight() - size) / 2;
    return new WritableImage(img.getPixelReader(), x, y, size, size);
}

把它画成原样。

2-将图像绘制到圆圈外一点

代码语言:javascript
复制
ImagePattern pattern(Image img, double radius) {
    double hRad = radius;   // horizontal "radius"
    double vRad = radius;   // vertical "radius"
    if (img.getWidth() != img.getHeight()) {
        double ratio = img.getWidth() / img.getHeight();
        if (ratio > 1) {
            // Width is longer, left anchor is outside
            hRad = radius * ratio;
        } else {
            // Height is longer, top anchor is outside
            vRad = radius / ratio;
        }
    }
    return new ImagePattern(img, -hRad, -vRad, 2 * hRad, 2 * vRad, false);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67608422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档