找回密码
 注册帐号

扫一扫,访问微社区

脚本 关于图片加载问题

13
回复
714
查看
打印 上一主题 下一主题
[ 复制链接 ]
7日久生情
2326/5000
排名
969
昨日变化

21

主题

244

帖子

2326

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
933
威望
0
注册时间
2016-9-30
在线时间
973 小时
最后登录
2020-10-22
100蛮牛币
最近在做图片读取的功能,因为Texture2D.LoadImage这个API锁死在主线程,实在太卡,准备用Texture2D.LoadRawTextureData这个API,但是api中的说明有点看不懂啊,比如“使用原始预格式化数据填充纹理像素”这个原始格式我应该怎么得到呢?有外部读取原始格式的相关库吗?希望谷各位大佬解惑!

2.jpg (74.6 KB, 下载次数: 9)

官方API例子

官方API例子

1.jpg (87.96 KB, 下载次数: 10)

官方API例子

官方API例子
回复

使用道具 举报

6蛮牛粉丝
1264/1500
排名
3616
昨日变化

12

主题

298

帖子

1264

积分

Rank: 6Rank: 6Rank: 6

UID
15500
好友
1
蛮牛币
330
威望
0
注册时间
2014-2-25
在线时间
540 小时
最后登录
2020-10-22
沙发
2020-9-23 11:00:26 只看该作者
不是用WebRequest吗
回复

使用道具 举报

7日久生情
2326/5000
排名
969
昨日变化

21

主题

244

帖子

2326

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
933
威望
0
注册时间
2016-9-30
在线时间
973 小时
最后登录
2020-10-22
板凳
楼主 2020-9-23 11:09:39 只看该作者
leleha 发表于 2020-9-23 11:00
不是用WebRequest吗

额,确实是用的WebRequest,不矛盾呀,读取之后就要用Texture2D.LoadImage从byte[]中转换呀!
回复

使用道具 举报

7日久生情
1950/5000
排名
2158
昨日变化

0

主题

144

帖子

1950

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
34290
好友
1
蛮牛币
3555
威望
0
注册时间
2014-7-15
在线时间
1163 小时
最后登录
2020-10-18
地板
2020-9-23 11:25:42 只看该作者
WebRequest能直接获取Teture2D
回复

使用道具 举报

7日久生情
2326/5000
排名
969
昨日变化

21

主题

244

帖子

2326

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
933
威望
0
注册时间
2016-9-30
在线时间
973 小时
最后登录
2020-10-22
5#
楼主 2020-9-23 11:36:25 只看该作者
麻辣隔壁 发表于 2020-9-23 11:25
WebRequest能直接获取Teture2D

确实可以,但是调用之后我自己测试了下,无法释放内存,情况和下面博主如出一辙
https://blog.csdn.net/muqian328/article/details/104920478
回复

使用道具 举报

7日久生情
1950/5000
排名
2158
昨日变化

0

主题

144

帖子

1950

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
34290
好友
1
蛮牛币
3555
威望
0
注册时间
2014-7-15
在线时间
1163 小时
最后登录
2020-10-18
6#
2020-9-23 11:50:11 只看该作者
把WebRequest释放了 应该就可以了吧   可能WebRequest还有这个图片的引用
回复

使用道具 举报

排名
31435
昨日变化

2

主题

14

帖子

62

积分

Rank: 2Rank: 2

UID
303335
好友
0
蛮牛币
788
威望
0
注册时间
2018-11-7
在线时间
38 小时
最后登录
2020-9-25
7#
2020-9-23 16:13:43 只看该作者
我加载图片回导致主线程卡顿,就是图片太大15M 怎么解决这个问题呢
回复

使用道具 举报

7日久生情
2822/5000
排名
663
昨日变化

3

主题

293

帖子

2822

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
163577
好友
2
蛮牛币
4259
威望
0
注册时间
2016-8-22
在线时间
1196 小时
最后登录
2020-10-22
8#
2020-9-23 18:44:54 只看该作者
最简单的莫过于读取Resources文件夹中的图片,网上的用webrequest弄<参考的代码应该很多>,下面的代码是我自己用的本地任意位置的图片读取,没觉得用loadImage很卡啊,不知道你读取多大的图片,我这个2K的1920*1080没啥问题,没感觉到卡,用的IO流读取,给你参考下:
string path = Application.streamingAssetsPath + \"/BGImage.png\";//路径自己随便写吧,我这个是举例
        using(FileStream fsRead = new FileStream(path FileMode.Open FileAccess.Read))
        {
            byte[] bytes = new byte[fsRead.Length];
            fsRead.Read(bytes 0 (int)fsRead.Length);
            Texture2D texture = new Texture2D(1920 1080);
            texture.LoadImage(bytes);

            rwBG.texture = texture;
        }
回复

使用道具 举报

7日久生情
2326/5000
排名
969
昨日变化

21

主题

244

帖子

2326

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
933
威望
0
注册时间
2016-9-30
在线时间
973 小时
最后登录
2020-10-22
9#
楼主 2020-9-24 15:36:42 只看该作者
麻辣隔壁 发表于 2020-9-23 11:50
把WebRequest释放了 应该就可以了吧   可能WebRequest还有这个图片的引用

我敢肯定是没有关联了,但是有时候就是释放不了,搞不懂原理!
回复

使用道具 举报

7日久生情
2326/5000
排名
969
昨日变化

21

主题

244

帖子

2326

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
933
威望
0
注册时间
2016-9-30
在线时间
973 小时
最后登录
2020-10-22
10#
楼主 2020-9-24 15:43:57 只看该作者
w20050830413 发表于 2020-9-23 18:44
最简单的莫过于读取Resources文件夹中的图片,网上的用webrequest弄,下面的代码是我自己用的本地任意位置 ...

有些图片是4K的,IO是在主线程的,本来就很卡了。。。。。。
还有就是loadimage是锁死在主线程的,图片一大加载起来一定会卡的。。。。。。
回复

使用道具 举报

7日久生情
1950/5000
排名
2158
昨日变化

0

主题

144

帖子

1950

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
34290
好友
1
蛮牛币
3555
威望
0
注册时间
2014-7-15
在线时间
1163 小时
最后登录
2020-10-18
11#
2020-9-24 18:38:34 只看该作者
Resources.UnloadUnusedAssets();用这个释放一下,可能不立即释放
回复

使用道具 举报

7日久生情
1570/5000
排名
2330
昨日变化

3

主题

196

帖子

1570

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132454
好友
0
蛮牛币
2294
威望
0
注册时间
2015-12-23
在线时间
753 小时
最后登录
2020-10-22
12#
2020-9-25 15:46:37 只看该作者
读取4k图即使是本地都会卡,而且读取只能放在主线程。
回复

使用道具 举报

7日久生情
2326/5000
排名
969
昨日变化

21

主题

244

帖子

2326

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
933
威望
0
注册时间
2016-9-30
在线时间
973 小时
最后登录
2020-10-22
13#
楼主 2020-10-9 17:33:13 只看该作者
麻辣隔壁 发表于 2020-9-24 18:38
Resources.UnloadUnusedAssets();用这个释放一下,可能不立即释放

就是用的这个,Unity这些新版本api老是奇奇怪怪的,不过后面还是只能用


然后全部用RawImage,速度确实快,缺点就是太占用内存,4K的一张图轻松50mb以上;



回复

使用道具 举报

7日久生情
2326/5000
排名
969
昨日变化

21

主题

244

帖子

2326

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
172976
好友
5
蛮牛币
933
威望
0
注册时间
2016-9-30
在线时间
973 小时
最后登录
2020-10-22
14#
楼主 2020-10-9 17:41:16 只看该作者
qq251634182 发表于 2020-9-25 15:46
读取4k图即使是本地都会卡,而且读取只能放在主线程。

可以试试这个



全部用RawImage


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

蛮牛教育10.1大促销!全站6折扣!