ARGB内存占用



ARGB分别代表透明度;红;绿;蓝

argb_8888:每个像素占32位,a=8;r=8;g=8;b=8;一共8*4=32位,一个字节8位,共占四个字节;

argb_4444:每个像素占16位,2个字节;

rgb_565:每个像素占16位,2个字节;g代表的6位无效保留,

alpha_8:每个像素占8位,1个字节;

位图位数越高,代表的图像越清晰,占用的内存也越大;

以argb_8888为基准:

argb_4444:透明度及三色减少一半,内存减少一半,图片失真;

rgb_565:舍弃透明度,但图片失真度小;


options.inPreferredConfig=Bitmap.Config.ARGB_8888;

一张480*800,argb_8888的图片有多大内存:480*800*4/1024=1500kb;

在Unity中列举运行时每张图片的内存占用情况可以通过以下步骤实现: ### 1. 查找场景中所有的图片资源 可以使用`Resources.FindObjectsOfTypeAll`方法来查找场景中所有的`Texture`对象,该方法会查找所有已加载的资源。 ### 2. 计算每张图片的内存占用 对于`Texture`对象,可以通过其属性来计算内存占用。不同类型的纹理计算方式略有不同,常见的有`Texture2D`。 以下是一个示例代码: ```csharp using UnityEngine; using System.Collections.Generic; public class TextureMemoryUsage : MonoBehaviour { void Start() { // 查找所有已加载的Texture2D对象 Texture2D[] textures = Resources.FindObjectsOfTypeAll<Texture2D>(); // 存储每张图片的信息 List<string> textureInfoList = new List<string>(); foreach (Texture2D texture in textures) { // 计算纹理的内存占用 int memorySize = CalculateTextureMemorySize(texture); // 记录纹理的名称和内存占用 string info = $"Texture Name: {texture.name}, Memory Usage: {memorySize} bytes"; textureInfoList.Add(info); } // 输出每张图片的内存占用信息 foreach (string info in textureInfoList) { Debug.Log(info); } } int CalculateTextureMemorySize(Texture2D texture) { // 获取纹理的宽度和高度 int width = texture.width; int height = texture.height; // 获取纹理的格式 TextureFormat format = texture.format; // 根据纹理格式计算每个像素占用的字节数 int bytesPerPixel = GetBytesPerPixel(format); // 计算纹理的内存占用 int memorySize = width * height * bytesPerPixel; return memorySize; } int GetBytesPerPixel(TextureFormat format) { switch (format) { case TextureFormat.RGB24: return 3; case TextureFormat.ARGB32: case TextureFormat.RGBA32: return 4; case TextureFormat.DXT1: return 1; case TextureFormat.DXT5: return 2; // 可以根据需要添加更的纹理格式处理 default: return 4; // 默认值 } } } ``` ### 代码解释: 1. **查找所有已加载的`Texture2D`对象**:使用`Resources.FindObjectsOfTypeAll<Texture2D>()`方法查找所有已加载的`Texture2D`对象。 2. **计算每张图片的内存占用**:遍历所有的`Texture2D`对象,调用`CalculateTextureMemorySize`方法计算每张图片的内存占用。 3. **输出每张图片的内存占用信息**:将每张图片的名称和内存占用信息存储在`textureInfoList`中,并通过`Debug.Log`输出。 ### 注意事项: - 该方法只能计算已加载的纹理的内存占用,对于未加载的纹理无法计算。 - 不同的纹理格式占用的字节数不同,需要根据实际情况进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值