java - 将 ARCore 的估​​计环境 HDR 立方体贴图保存到内存

标签 java android arcore hdr

ARCore通过以下API调用提供场景的HDR Cube贴图:

// Get the current frame.
Frame frame = session.update();

// Get the light estimate for the current frame.
LightEstimate lightEstimate = frame.getLightEstimate();

// Get HDR environmental lighting as a cubemap in linear color space.
Image[] lightmaps = lightEstimate.getEnvironmentalHdrCubeMap();

我想将这些光照贴图保存到内部或外部存储器。我怎样才能实现这个目标?

最佳答案

我找到了解决方案!

从上面获取光照贴图后添加以下代码。这会将 android.media.Image 类型转换为位图,然后将其保存到内存中。

for (int i = 0; i < lightmaps.length; i++)
{
    Image lightmapimage = lightmaps[i];

    int width = lightmapimage.getWidth();
    int height = lightmapimage.getHeight();
    Image.Plane[] planes = lightmapimage.getPlanes();

    int pixelStride = planes[0].getPixelStride();
    int rowStride = planes[0].getRowStride();
    int rowPadding = rowStride - pixelStride * width;
    ByteBuffer buffer = planes[0].getBuffer();
    Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);
    bitmap.copyPixelsFromBuffer(buffer);


    lightmapimage.close();
    saveBitmap(bitmap);
}

下面是saveBitmap函数[Source] 。这会将位图以 png 格式保存到 /storage/emulate/0/DCIM。如果您愿意,请更改此设置。

public static void saveBitmap(Bitmap bm)
{
    String path = "";
    File parent = new File(TextUtils.isEmpty(path) ? Environment.getExternalStorageDirectory() + "/" + Environment
            .DIRECTORY_DCIM : path);
    if (!parent.exists()) {
        parent.mkdirs();
    }
    File f = new File(parent.getAbsolutePath() + File.separator + "arcore_bitmap" + new Date().getTime() + ".jpg");
    if (f.exists()) {
        f.delete();
    }
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(f);
        bm.compress(Bitmap.CompressFormat.PNG, 90, out);
        Log.i("savingbitmap","savingbitmap" + parent.getAbsolutePath());
        out.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

关于java - 将 ARCore 的估​​计环境 HDR 立方体贴图保存到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61105497/

相关文章:

java - doPost 是否加密 URL 及其外部附加参数

java - 处理许多记录的一般事务问题

android - 如何在 Android Studio 项目中查找 ID 的使用情况

java - 适用于不同屏幕尺寸的 Android 处理程序

android - ARCore - 在增强图像表面上播放 YouTube 视频

java - 在使用 java 的 ARCore 中,如何在我的世界中绘制 3D 三角形/线

java - 在 Java 中构建具有可变列数的PreparedStatement,用于将数据插入数据库

java - ErrorHandler 用于在一个地方解决多个异常?

Android 搜索栏自定义拇指卡在开始

unity-game-engine - 协程运行时应用程序/游戏完全卡住