掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
想了解更多內(nèi)容,請(qǐng)?jiān)L問:

成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元安達(dá)做網(wǎng)站,已為上家服務(wù),為安達(dá)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos./#zz
聲明一下哦,這是我看了夏曹俊老師在周六的直播預(yù)習(xí)材料的加持下所寫的一個(gè)小demo,大家記得都去看夏老師的直播哦,入口主頁就有顯示。
不多說,先上demo的跑起來的效果,如下兩張圖:點(diǎn)擊顯示圖片的按鈕之后就會(huì)顯示出一張圖片(圖片是個(gè)什么玩意,知足吧,我拿遠(yuǎn)程模擬機(jī)拍攝的)
完整demo在附件中進(jìn)行下載
PS說一下操作步驟吧,把demo燒進(jìn)手機(jī),記住此時(shí)候的手機(jī)是沒有圖片的,先打開照相機(jī)拍攝一張圖片,然后你就會(huì)得到和下面截圖一樣的什么玩意的圖片,然后打開demo,點(diǎn)擊顯示圖片按鈕就會(huì)顯示你拍攝到的圖片了)
老規(guī)矩還是先說一下大概思路:
1.讀取本機(jī)的圖片,首先你得有權(quán)限,所以先想辦法獲得權(quán)限
2.獲得權(quán)限之后,就可以使用類似數(shù)據(jù)庫的搜索方法來搜索圖片的ID了
3.獲得ID之后,然后將其轉(zhuǎn)換為uri
4.得到uri之后,然后使用uri生成Pixmap
5.得到Pixmap之后,使用Image來渲染其Pixmap
1.來獲得讀取照片的權(quán)限
在config中添加如下配置文件:
- "reqPermissions": [{
- "name": "ohos.permission.READ_USER_STORAGE"
- }
然后在java代碼中獲取到這個(gè)權(quán)限
- String[] permission = {"ohos.permission.READ_USER_STORAGE"};
- requestPermissionsFromUser(permission,0);
2.獲得權(quán)限之后,就可以使用類似數(shù)據(jù)庫的搜索方法來搜索圖片的ID了
首先獲得一個(gè)DataAbilityHelper
- DataAbilityHelper helper = DataAbilityHelper.creator(getContext());
然后調(diào)用query查詢方法獲得圖片ID,這里其實(shí)只有一張
- ResultSet result = helper.query(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, null, null);
- int mediaId = result.getInt(result.getColumnIndexForName(AVStorage.Images.Media.ID));
3.獲得ID之后,然后將其轉(zhuǎn)換為uri
- Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI,""+mediaId);
4.得到uri之后,然后使用uri生成Pixmap
4.1 先將得到的uri使用openFile的API得到FileDescriptor對(duì)象
4.2 使用上一步的對(duì)象作為參數(shù)新建一個(gè)ImageSource對(duì)象和這個(gè)對(duì)象之下的DecodingOptions對(duì)象
4.3 然后調(diào)用上一步建好的ImageSource對(duì)象的createThumbnailPixelmap方法生成Pixmap
- FileDescriptor filedesc = helper.openFile(uri,"r");
- ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOption();
- decodingOpts.desiredSize = new Size(300,300);
- ImageSource imageSource = ImageSource.create(filedesc,null);
- PixelMap pixelMap = imageSource.createThumbnailPixelmap(decodingOpts,true);
5.得到Pixmap之后,使用Image來渲染其Pixmap
無論使用何種手段得到一個(gè)Image對(duì)象,然后調(diào)用它的setPixelMap將上一步得到的Pixmap作為參數(shù)傳進(jìn)去就OK了。至于別的都是一些對(duì)Image其他屬性的設(shè)置。
- Image img = (Image)findComponentById(ResourceTable.Id_image1);
- img.setId(mediaId);
- img.setHeight(300);
- img.setWidth(300);
- img.setMarginTop(20);
- img.setMarginLeft(20);
- img.setPixelMap(pixelMap);
- img.setScaleMode(Image.ScaleMode.ZOOM_CENTER);
由于時(shí)間比較急,所以這個(gè)demo比較簡(jiǎn)單,只可以顯示一張圖片,下周我應(yīng)該會(huì)在這個(gè)demo的基礎(chǔ)上繼續(xù)完善,有興趣的朋友可以關(guān)注一下。
完整demo的源碼見附件
?著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
想了解更多內(nèi)容,請(qǐng)?jiān)L問:
和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos./#zz

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流