如何在 Unity 中 EncodeToPng 压缩纹理

2023-12-28

我开发了一个保存纹理(屏幕截图)的应用程序,我需要压缩它们,但是然后-我不能使用EncodeToPNG方法,以便在屏幕上显示图像。

我的步骤:

  1. Texture2D tex = new Texture2D(recwidth, recheight, TextureFormat.RGB24, false);//RGB24-因为下一步:

  2. tex.ReadPixels(rex, rdPXX, rdPXY); tex.Apply();

  3. tex.Compress(false);

稍后我需要将其显示在屏幕上 -

  1. var bytes = tex.EncodeToPNG();

但我不能,因为众所周知EncodeToPNG不支持压缩纹理,那我该怎么办?它占用了我手机上的大量空间


使用前必须先解压纹理EncodeToPNG在上面。你应该能够做到这一点RenderTexture。复制压缩包Texture2D to RenderTexture。分配RenderTexture to RenderTexture.active然后使用ReadPixels复制像素RenderTexture到新的Texture2D您希望采用解压缩格式。现在,您可以使用EncodeToPNG on it.

执行此操作的辅助函数:

public static class ExtensionMethod
{
    public static Texture2D DeCompress(this Texture2D source)
    {
        RenderTexture renderTex = RenderTexture.GetTemporary(
                    source.width,
                    source.height,
                    0,
                    RenderTextureFormat.Default,
                    RenderTextureReadWrite.Linear);

        Graphics.Blit(source, renderTex);
        RenderTexture previous = RenderTexture.active;
        RenderTexture.active = renderTex;
        Texture2D readableText = new Texture2D(source.width, source.height);
        readableText.ReadPixels(new Rect(0, 0, renderTex.width, renderTex.height), 0, 0);
        readableText.Apply();
        RenderTexture.active = previous;
        RenderTexture.ReleaseTemporary(renderTex);
        return readableText;
    }
}

Usage:

创建压缩纹理:

Texture2D tex = new Texture2D(recwidth, recheight, TextureFormat.RGB24, false);
tex.ReadPixels(rex, rdPXX, rdPXY);
tex.Apply();
tex.Compress(false);

从压缩纹理创建一个新的解压缩纹理:

Texture2D decopmpresseTex = tex.DeCompress();

编码为 png

var bytes = decopmpresseTex.EncodeToPNG();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Unity 中 EncodeToPng 压缩纹理 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 宏定义冲突

    我遇到了这个问题 这与宏函数无关 只是简单的字符串值宏替换 我有两个头文件 test1 h define TEST 123 test2 h define TEST 456 现在我有一个程序包含这两个标头 但我希望我的实际 TEST 为 12
  • 将雪(和降雪)与 AWS 结合使用,在 R 中进行并行处理

    相对于我之前的类似的问题 https stackoverflow com questions 7241244 using aws for parallel processing with r 我尝试在AWS上使用snow snowfall进
  • .NET 4.5 中的序列化中断

    我们遇到了一个仅在 NET 4 5 中发生的序列化问题 相同的代码在 NET 4 中工作正常 我们正在尝试使用一些字段序列化继承类型 基类和继承类都标记为可序列化属性 我们在 Web 服务的客户端收到一个异常 说有一个方法访问异常在服务器端
  • 用于模糊字符串比较的好 Python 模块? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • Wagtail:如何将模型实例传递给小部件并在模板中访问它

    我有一个基于 Wagtails 的模型Page模型 我正在将自定义小部件分配给模型字段之一 渲染管理视图时是否可以在小部件 HTML 模板中访问模型实例 我需要管理视图中的小部件来知道哪个 IDSimplePage该小部件所属 即获取值 p
  • OSX Mavericks - 不再安装 BIND...如何使本地 DNS 服务器正常工作?

    我一直在 OSX 上使用 BIND 为我的本地开发机器提供本地 DNS 解析器 特别是为了方便虚拟机访问我的本地开发环境 愚蠢的是 我决定连夜升级到 OSX Mavericks 但似乎不再安装 BIND 即使添加了命令行开发人员工具 有人建
  • clang 尝试捕获失败

    这是我所说的代码部分 try std cerr lt lt first try lt lt std endl po store po parse config file ifs configFileOptions false vm catc
  • 从两个向量创建新的 ID(双向)

    我在一个由因子组成的数据框中有两个向量 每个向量中有约 10000 个唯一因子 这是我的数据的简化示例 tg lt data frame A sample letters 1 5 30 replace TRUE B sample lette
  • Pandas 数据框 to_csv - 分成多个输出文件

    将非常大的数据帧 50GB 分割成多个输出 水平 的最佳 最简单方法是什么 我想过做类似的事情 stepsize int 1e8 for id i in enumerate range 0 df size stepsize start i
  • 如何在 JasperReports Server 4.0.0 中配置邮件服务器设置

    我在用着JasperReports服务器4 0 0我想如何配置邮件服务器设置以通过报告计划邮寄报告 我怎样才能做到这一点 有人知道这个吗 您应该编辑
  • 由于“完美分离错误”,无法运行逻辑回归

    我是 Python 数据分析的初学者 并且在完成这项特定任务时遇到了麻烦 我进行了广泛的搜索 但无法找出问题所在 我导入了一个文件并将其设置为数据框 清理了文件中的数据 然而 当我尝试将我的模型拟合到数据时 我得到了 检测到完美分离 结果不
  • 为 mat-select 预选多个值 - Angular 6

    我正在尝试在垫选择中预选多个选项 到目前为止我还无法实现这一目标 这是 HTML 文件
  • 如何增加 Cassandra 的数据流读取并行性

    我正在尝试将大量数据 2 TB 30kkk 行 从 Cassandra 导出到 BigQuery 我所有的基础设施都在 GCP 上 我的 Cassandra 集群有 4 个节点 每个节点 4 个 vCPU 26 GB 内存 2000 GB
  • 转置一维数组

    所以我有一个包含 N 个值的一维数组 其中 N 是一个完全平方数 我将这个一维数组可视化为二维数组 尽管事实并非如此 例如 具有值的数组int Array 0 1 2 3 4 5 6 7 8 That is int Array new in
  • Javascript父窗口如何向弹出窗口发送数据?

    我一直在使用 HTML 和 Javascript 编写基于浏览器的应用程序 或者更确切地说 快速构建应用程序原型 我希望主窗口能够显示带有动态数据的弹出窗口 但是 我不知道如何在 Javascript 中将数据从父窗口推送到弹出窗口 请注意
  • 对列表中的字典元素进行排序

    对于这份清单 u status u Active u name u X u orgID u 109175 u type u Created Section class addbold u status u Active u name u A
  • PHP DOMDocument - 为什么破折号“–”转换为 –

    我正在使用 DOMDocument 来提取一些段落 这是我导入的初始 htm 文件的样子 p class 8reference span 1 span span Sivonen K Jones G Cyanobacterial Toxins
  • Android 开发:在单独的类文件中包含 AsyncTask

    我一直在尝试各种示例 试图熟悉 AsyncTask 到目前为止 我看到的所有示例都将 AsyncTask 包含到主 Activity 的 onCreate 方法中 我不太喜欢它 所以我想看看将它分成自己的类有多难 到目前为止我有这个 the
  • babel-esLint的问题:解析错误:ES模块的require()

    你好 我需要你的帮助 我该如何修复这个错误 解析错误 不支持来自 Desktop Projects MealsToGo node modules babel eslint lib require from eslint js 的 ES 模块
  • 如何在 Unity 中 EncodeToPng 压缩纹理

    我开发了一个保存纹理 屏幕截图 的应用程序 我需要压缩它们 但是然后 我不能使用EncodeToPNG方法 以便在屏幕上显示图像 我的步骤 Texture2D tex new Texture2D recwidth recheight Tex