首页 > 其他分享 >读取本地图片

读取本地图片

时间:2024-08-23 18:26:57浏览次数:5  
标签:读取 ImageData ImageWrapper Texture 本地 UTexture2D 加载 图片

读取本地图片

代码实现

build.cs 添加 ImageWrapper 模块,使用时注意添加相关头文件

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ImageWrapper" });
  • 支持图片类型

    • png
    • jpg
    • bmp
    • ico
    • exr
    • icns
  • 注意 jpg 读取后 R 和 B 的通道位置

    • ERGBFormat::RGBAPF_R8G8B8A8ERGBFormat::BGRPF_B8G8R8A8

在虚幻引擎中,要将本地图片转换为 UTexture2D 类型,你可以使用以下步骤:

  1. 加载图片文件: 使用 FImageUtils::ImportFileAsTexture2D 函数或自定义加载函数将图片文件加载为 UTexture2D 对象。

  2. 示例代码

    cppCopy Code#include "ImageUtils.h"
    #include "Engine/Texture2D.h"
    
    UTexture2D* LoadImageAsTexture2D(const FString& FilePath)
    {
        TArray<uint8> ImageData;
        if (FFileHelper::LoadFileToArray(ImageData, *FilePath))
        {
            IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(TEXT("ImageWrapper"));
            TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG); // Assuming PNG format
            
            if (ImageWrapper->SetCompressed(ImageData.GetData(), ImageData.Num()))
            {
                TArray<uint8> UncompressedRGBA;
                if (ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBA))
                {
                    UTexture2D* Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight());
                    if (Texture)
                    {
                        void* TextureData = Texture->PlatformData->Mips[0].BulkData.GetAllocation();
                        FMemory::Memcpy(TextureData, UncompressedRGBA.GetData(), UncompressedRGBA.Num());
                        Texture->UpdateResource();
                        return Texture;
                    }
                }
            }
        }
        return nullptr;
    }
    
  3. 使用场景: 你可以将此函数用于动态加载和显示本地图片作为纹理,例如在用户界面或游戏中使用。

确保正确处理图片格式和文件路径,并根据需要调整代码以适应不同的图像格式。


代码解析

这段示例代码的作用是将本地图片文件加载并转换为虚幻引擎中的 UTexture2D 对象。以下是代码的逐步解释:

  1. 加载图片文件
    • FFileHelper::LoadFileToArray 用于读取指定路径的图片文件,并将其数据存储到 ImageData 数组中。
  2. 创建图片包装器
    • IImageWrapperModule 模块用来处理不同格式的图片,ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG) 创建一个用于处理 PNG 格式图片的包装器。
  3. 设置压缩数据
    • ImageWrapper->SetCompressed 将图片数据传递给包装器。
  4. 解压缩数据
    • ImageWrapper->GetRaw 从包装器中提取解压缩的 RGBA 数据。
  5. 创建 UTexture2D 对象
    • UTexture2D::CreateTransient 创建一个临时的 UTexture2D 对象,大小与图片相匹配。
    • Texture->PlatformData->Mips[0].BulkData.GetAllocation() 获取纹理的数据区域,并将解压缩的图片数据复制到这个区域。
  6. 更新资源
    • Texture->UpdateResource() 更新纹理资源,使其可用于渲染。
  7. 返回纹理对象
    • 最后返回创建的 UTexture2D 对象。

这样,你可以动态加载本地图片,并在虚幻引擎中将其作为纹理使用。

拓展

图片包装器Image Wrapper)是一个处理图片格式的工具,它负责将图片数据从各种格式(如 PNGJPEG)解码成原始像素数据。虚幻引擎中的 IImageWrapper 接口和相关模块(如 IImageWrapperModule)提供了对图片格式的支持,允许你读取、解码和处理不同类型的图像文件。通过这些包装器,你可以将图片文件转换为可以在引擎中使用的纹理格式。

标签:读取,ImageData,ImageWrapper,Texture,本地,UTexture2D,加载,图片
From: https://www.cnblogs.com/Dreammoon/p/18376822

相关文章

  • 网站图片显示错误怎么办
    打开HTML文件:使用文本编辑器打开包含图片的HTML文件。检查图片路径:寻找<img>标签,检查src属性是否正确指向图片文件。例如:html <imgsrc="images/example.jpg"alt="ExampleImage">验证路径:确认路径是否正确,如果是相对路径,确保它是相对于HTML文件的位......
  • 织梦DedeCMS幻灯片调用图片为什么显示模糊
    很多使用织梦程序做网站的时候遇到一个问题就是dedecms网站首页幻灯片调用的是文章缩略图,如果我们实际图片宽高比例和幻灯片的比例相差太大的话,那么在首页显示的幻灯片图片就会自动拉伸变的模糊,这个看起来确实是一个比较影响用户体验的问题,下面就给大家分析一下解决这个问题的两个......
  • 织梦文章页中怎么用js控制图片的大小
    在织梦CMS的文章页中使用JavaScript来控制图片的大小,可以通过以下几种方法实现:方法一:使用纯JavaScript获取图片元素:使用 document.getElementById 或 document.querySelector 来获取页面上的图片元素。设置图片大小:通过修改图片元素的 style.width 和 style.he......
  • 阿里云OSS上传图片报错
    此类故障是https的问题,基本设置那里要改成https开头的域名,还有就是插件里也要对应起来阿里云OSS上传图片时如果出现报错,通常有几种可能的原因及解决方法:权限问题:错误代码 AccessDenied 表示没有足够的权限访问对象或执行操作。解决方法:登录到阿里云控制台,在RAM(Resource......
  • 实现 文件上传【头像/图片】
    实现文件上传【头像/图片】浏览器---->后端服务----->阿里云OSS工具类@Data@AllArgsConstructor@Slf4jpublicclassAliOssUtil{privateStringendpoint;privateStringaccessKeyId;privateStringaccessKeySecret;privateStringbucketName;......
  • Java 调用电脑中安装的tesseract.exe进行图片中的文本方向识别
    StringimagePath="测试图片完整地址";StringtesseractPath="Tesseract安装路径\\tesseract.exe";ProcessBuilderprocessBuilder=newProcessBuilder(tesseractPath,imagePath,"stdout","--......
  • gif图片怎么压缩大小?深度测评7款动图压缩工具(内含教程)
    gif图片在社交媒体和网络上非常流行,深受大家喜爱,因为它可以呈现生动的动画效果。gif动图之所以受到欢迎,主要因为其出色的压缩算法,能有效存储多个帧,从而实现流畅的动画。然而,大多数社交媒体平台对gif图片的上传文件大小都有一定的限制。为了确保gif动图能快速加载并优化带宽,在......
  • 本地生活同城便民信息小程序源码系统 带完整的安装代码包以及搭建部署教程
    系统概述本地生活同城便民信息小程序源码系统是一款专为本地生活服务打造的综合性平台。它通过整合各类本地商家和服务资源,为用户提供便捷、高效的生活服务信息查询和交易渠道。该系统采用先进的技术架构,具备高度的稳定性和扩展性,能够适应不断变化的市场需求。同时,它还注重用......
  • 基础组件:图片
    Flutter中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。ImageProviderImageProvider是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvider,如AssetImage是实现了从Asset中加载图片的I......
  • 本地生活服务平台源码在哪里?2大获取渠道源码质量解析!
    当前,本地生活赛道的发展潜力和收益前景已经日渐显化,本地生活服务商的数量也随之不断增长。不过,由于官方平台对于其本地生活服务商的申请条件并未放宽,因此,新增本地生活服务商中的绝大多数都会选择部署本地生活服务平台源码完成入局。在此背景下,以本地生活服务平台源码在哪里为代......