如何在Android和iPhone上拍摄占据整个屏幕的图像?

问题描述 投票:0回答:1

我希望在可以覆盖整个屏幕的手机上拍照,这是在Snapchat应用程序中完成的。 Android和iPhone拍摄的图像仅覆盖屏幕中央的一部分(可能是有意的,以便菜单栏可以覆盖其余部分)。

如果您在Snapchat中拍摄图像 - 并将其导出到相机胶卷,您将看到图像保持放大 - 覆盖整个屏幕。这就是我想拍摄照片的方式。 (现在它们会因为图像太小而变形 - 我尝试使用整个屏幕显示它们)

我正在使用Gluon和PicturesService:http://docs.gluonhq.com/charm/javadoc/4.1.0-SNAPSHOT/index.html?com/gluonhq/charm/down/plugins/PicturesService.html

但是我假设您需要在更深层次中调整内容以实现此目的。有人能指出我正确的方向吗?

mobile camera image-size gluon snapchat
1个回答
1
投票

iOS上的相机​​宽高比和屏幕宽高比不同。这就是为什么你不能完全显示图像,同时避免变形。但是在视频中它与屏幕宽高比相匹配。所以我认为Snapchat以某种方式在视频模式下拍摄了截图,或者一个单帧从相机中取出。

然而,看着我的Android手机 - 视频模式下的摄像头并没有在整个屏幕上显示(没有匹配的宽高比)。我很惊讶。我在上面下载了Snapchat,发现快照仍然覆盖了整个屏幕 - 我更加惊讶。

然后我开始意识到两侧的按扣被切断了。所以他们所做的就是简单地剪切原始图像,直到它与显示器的宽高比相匹配。

以下是我切割Android图像的方法:

public Image cutImageFit(Scene scene, Image image){
    PixelReader pixelReader = image.getPixelReader();
    double sceneRatio = scene.getWidth() / scene.getHeight();

    double width = image.getWidth();
    double height = image.getHeight();
    double ratio = width / height;

    // System.out.println("Scene is " + scene.getWidth() + " and " + scene.getHeight());
    // System.out.println("sceneRatio " + sceneRatio);
    // System.out.println("ratio is " + ratio);

    if(sceneRatio > 1){
        double cutTo = width / sceneRatio;
        height = cutTo;
    }
    else if(sceneRatio < 1){
        double cutTo = height * sceneRatio;
        width = cutTo;
    }
    else{
        // Square scene...
    }

    Double d = width;
    int w = d.intValue();
    d = height;
    int h = d.intValue();
    System.out.println("new width " + w + " and height " + h + " for the image");
    WritableImage writableImage = new WritableImage(pixelReader, 0, 0, w, h);
    return writableImage;
}

...你也可以编辑方法,以便它切割双方,而不是只切断一方。这很有帮助:Effective image cropping in JavaFX

但是,当谈到iOS图像时,我遇到了问题。图像必须旋转。如果它是垂直拍摄的,那就是。如果有人可以帮助我,我会很高兴的!

我可以通过使用imageView旋转图像然后拍摄javafx快照来解决后一个问题,使用方法而不是iOS原始图像作为image参数传递。这样,本地坐标系统在旋转后也与进入系统中的其余GUI软线保持“同步”。因此实际上重新标记了x和y轴。

编辑:Android defualt相机实际上包含一个我不知道的“全屏”设置。因此,必须选择该设置。它产生一个白色区域,但我认为应用程序无法显示在状态栏区域。在应用程序可以执行的其他默认照片查看器中,一切看起来都很好(在状态栏下方显示图像)。因此,使用上面的方法可以裁剪图像 - 或者可以创建FullscreenService来显示拍摄的图像,使用独立的单独Android图层,由José在问题的评论中建议。

当涉及到iOS时,可能会使用相机第三方应用程序,这样做 - 或编辑其中连接有本机ObjectiveC代码的IOSPicturesService

© www.soinside.com 2019 - 2024. All rights reserved.