第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js如何深拷貝ImageData?

js如何深拷貝ImageData?

動漫人物 2019-04-21 20:42:04
我在做js濾鏡,因為要還原濾鏡,需要拷貝一份原始的ImageData作備份。使用過的方法有oriData=$.extend(true,{},imageData);//拷貝完之后已經(jīng)不是`ImageData`類型了oriData=newImageData(imageData.data,imageData.width,imageData.height);//參考https://developer.mozilla.org/zh-CN/docs/Web/API/ImageData/ImageData這里的用法,但是發(fā)現(xiàn)這其實是一種淺拷貝...也不行
查看完整描述

2 回答

?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗 獲得超5個贊

你要深拷貝的話這樣不行么。。
vartemp=newImageData(imagedata.width,imagedata.height);
temp.data.set(imagedata.data);
其實在我一個項目里我是更想找一個優(yōu)雅的淺拷貝的方法來提高效率的。。
                            
查看完整回答
反對 回復(fù) 2019-04-21
?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗 獲得超22個贊

額。。。我在控制臺上試了一下,發(fā)現(xiàn)newImageData是可以新建一個ImageData對象,但是ImageData.data對象卻依然是淺拷貝,所以只要也new一個這個就行了。而newUint8ClampedArray這個構(gòu)造函數(shù)的用法也純粹是亂試出來的...因為沒找到介紹這個對象的文檔,也不知道這樣的兼容性怎么樣,求大大幫忙~~
varcopyImageData=function(imgData){
returnimgData&&newImageData(newUint8ClampedArray(imgData.data),imgData.width,imgData.height);
};
varbb=copyImageData(temp1)//temp1是我通過console.log出來的一個ImageData,在控制臺保存為temp1
//=>ImageData{data:Uint8ClampedArray[1218816]}
temp1.data[0]
//=>222
bb.data[0]
//=>222
temp1.data[0]=189
//=>189
bb.data[0]
//=>222
ps.題外話,在任何方法中,使用這種需要深拷貝的數(shù)據(jù)時,必須先深拷貝再修改數(shù)據(jù),否則作為參數(shù)傳入的數(shù)據(jù)也能被修改
                            
查看完整回答
反對 回復(fù) 2019-04-21
  • 2 回答
  • 0 關(guān)注
  • 379 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號