最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Unity中保存TextureFormat為Alpha8的灰度圖時(shí),直接保存是透明圖的處理

2022-01-31 18:30 作者:TenderRain-  | 我要投稿

記個(gè)筆記,如果大佬有更好的方式可以指出,謝謝

先說(shuō)下我因?yàn)橐粋€(gè)VR項(xiàng)目需要保存設(shè)備頭盔上的灰度攝像頭的畫面,因?yàn)轱@示是設(shè)備的SDK中提供的,顯示出來(lái)的是正常的灰度圖,就想當(dāng)然的通過(guò)常規(guī)的方法保存圖片。結(jié)果發(fā)現(xiàn)保存下來(lái)的JPG圖是純黑的圖,保存的PNG和TGA都是大部分透明的圖(現(xiàn)在寫筆記沒(méi)有設(shè)備所以就附上圖片了,后續(xù)有空再補(bǔ)上吧)后面我先說(shuō)下原因,最后會(huì)放上我的解決方案和代碼。

接下來(lái)說(shuō)下我碰到的是什么原因造成這樣的,原因是設(shè)備安卓層傳上來(lái)的畫面數(shù)據(jù)是Alpha8的,通過(guò)Texture2D加載后再unity中顯示會(huì)正常顯示灰度畫面,但是實(shí)際上每一幀圖片的每個(gè)像素點(diǎn)的RGB都是(1,1,1)或者(0,0,0),只有每一個(gè)像素點(diǎn)的Alpha值是不一樣的,因此保存JPG格式時(shí)因?yàn)闆](méi)有透明通道所以不保存alpha值,所以顯示的是全黑的,當(dāng)保存有透明通道的PNG或者TGA時(shí)就變成都是透明圖了。

解決方案很簡(jiǎn)單,但是需要了解灰度圖是怎么產(chǎn)生的,這邊簡(jiǎn)單說(shuō)下,普通的圖片基本都是RGB(紅綠藍(lán))三基色組成或者RGBA(紅綠藍(lán)透明值)三基色加一個(gè)透明值組成,灰度圖其實(shí)就是讓RGB三種顏色的數(shù)值相等就行,所以常見(jiàn)的生成灰度圖有三種方法:1、最大值法,2、平均值法,3、加權(quán)平均值法,這里就不擴(kuò)展了講了,感興趣的可以自己查查這資料還是很多的。

前面說(shuō)了這么多其實(shí)就是讓我們生成一張我們能保存的灰度圖就行了,把從安卓層傳上來(lái)的Alpha值賦給RGB三個(gè)顏色,Alpha值等于1就能生成一張我們引擎中看到的灰度圖了。下面直接說(shuō)我的做法。

第一種做法,保存時(shí)修改圖片的每一個(gè)像素點(diǎn)數(shù)據(jù),再進(jìn)行保存,代碼如下,但是這個(gè)做法如果圖片分辨率太高會(huì)卡死主線程,建議下面協(xié)程、異步或者多線程處理。(這種做法很消耗時(shí)間,不建議使用)

第二種是通過(guò)Shader疊加來(lái)生成一張想要的灰度圖,方法也很簡(jiǎn)單,拿到圖片數(shù)據(jù)后通過(guò)Graphics.Blit(pngTexture, GrayMaterial);方法疊加一個(gè)材質(zhì)球再保存圖片即可,下面是代碼

下面是shader的代碼,其實(shí)和灰度圖shader一樣,只不過(guò)在處理rgba數(shù)值時(shí)修改一下就行。

本篇內(nèi)容到這里就結(jié)束了,如果有大佬有更好的方法歡迎評(píng)論私信提供。謝謝

最后放一個(gè)我封裝好的導(dǎo)出文件的方法,也是前面保存圖片時(shí)用到的ExportFile方法


Unity中保存TextureFormat為Alpha8的灰度圖時(shí),直接保存是透明圖的處理的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
屯门区| 峨边| 博野县| 临汾市| 微山县| 海门市| 台中市| 临沭县| 莒南县| 锦州市| 桃江县| 东山县| 佛教| 浮梁县| 兴宁市| 渝北区| 藁城市| 莆田市| 河源市| 若尔盖县| 固原市| 洛扎县| 隆安县| 南宁市| 南漳县| 海口市| 麟游县| 黔西县| 竹溪县| 井冈山市| 营口市| 北宁市| 平邑县| 铅山县| 崇文区| 老河口市| 哈尔滨市| 陆丰市| 北宁市| 万源市| 凤城市|