鴻蒙跳轉到相簿或者檔案選擇圖片並顯示到Image控制元件中
今天有個壇友問跳轉到檔案和相簿如何將選擇的圖片讀取出來在Image控制元件中顯示,我這裡分享一下解決思路。
首先當然是建個佈局頁面,頁面上放個按鈕和圖片控制元件,如下程式碼
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos=" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical"> <Button ohos:id="$+id:btnChooseImg" ohos:height="match_content" ohos:width="match_content" ohos:text="選擇圖片" ohos:text_size="40vp" ohos:background_element="gray"></Button> <Image ohos:id="$+id:showChooseImg" ohos:height="match_content" ohos:width="match_content" ></Image> </DirectionalLayout>
然後看一下後臺程式碼,後代主要用到DataAbility去訪問圖片,訪問圖片我們需要申請ohos.permission.READ_USER_STORAGE許可權,程式碼如下
package com.example.phonetest.slice; import com.example.phonetest.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.ability.DataAbilityHelper; import ohos.aafwk.content.Intent; import ohos.aafwk.content.Operation; import ohos.agp.components.Button; import ohos.agp.components.Image; import ohos.hiviewdfx.HiLog; import ohos.hiviewdfx.HiLogLabel; import ohos.media.image.ImageSource; import ohos.media.image.PixelMap; import ohos.media.photokit.metadata.AVStorage; import ohos.utils.net.Uri; import java.io.File; import java.io.FileDescriptor; public class ChooseImageTestSlice extends AbilitySlice { static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x0001, "選擇圖片測試"); private final int imgRequestCode=1123; Image showChooseImg=null; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_choose_image_test); //獲取儲存許可權 requestPermissionsFromUser(new String[]{"ohos.permission.READ_USER_STORAGE"},imgRequestCode); Button btnChooseImg=(Button)findComponentById(ResourceTable.Id_btnChooseImg); btnChooseImg.setClickedListener(c->{ //選擇圖片 selectPic(); }); showChooseImg=(Image)findComponentById(ResourceTable.Id_showChooseImg); } private void selectPic() { Intent intent = new Intent(); Operation opt=new Intent.OperationBuilder().withAction("android.intent.action.GET_CONTENT").build(); intent.setOperation(opt); intent.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT); intent.setType("image/*"); startAbilityForResult(intent, imgRequestCode); } @Override protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) { if(requestCode==imgRequestCode) { HiLog.info(label,"選擇圖片getUriString:"+resultData.getUriString()); //選擇的Img對應的Uri String chooseImgUri=resultData.getUriString(); HiLog.info(label,"選擇圖片getScheme:"+chooseImgUri.substring(chooseImgUri.lastIndexOf('/'))); //定義資料能力幫助物件 DataAbilityHelper helper=DataAbilityHelper.creator(getContext()); //定義圖片來源物件 ImageSource imageSource = null; //獲取選擇的Img對應的Id String chooseImgId=null; //如果是選擇檔案則getUriString結果為content://com.android.providers.media.documents/document/image%3A30,其中%3A是":"的URL編碼結果,後面的數字就是image對應的Id //如果選擇的是相簿則getUriString結果為content://media/external/images/media/30,最後就是image對應的Id //這裡需要判斷是選擇了檔案還是相簿 if(chooseImgUri.lastIndexOf("%3A")!=-1){ chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf("%3A")+3); } else { chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf('/')+1); } //獲取圖片對應的uri,由於獲取到的字首是content,我們替換成對應的dataability字首 Uri uri=Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI,chooseImgId); HiLog.info(label,"選擇圖片dataability路徑:"+uri.toString()); try { //讀取圖片 FileDescriptor fd = helper.openFile(uri, "r"); imageSource = ImageSource.create(fd, null); //建立點陣圖 PixelMap pixelMap = imageSource.createPixelmap(null); //設定圖片控制元件對應的點陣圖 showChooseImg.setPixelMap(pixelMap); } catch (Exception e) { e.printStackTrace(); } finally { if (imageSource != null) { imageSource.release(); } } } } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } }
我看一下執行結果
記得提前拍兩張照片,因為模擬器裡面一開始是沒有照片的
原文連結: https://developer.huawei.com/consumer/cn/forum/topic/0202550313178650107?fid=0101303901040230869
原作者: Kak_zhou
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2775418/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- iOS開發-新建相簿並儲存圖片到該相簿iOS
- vue el-image 顯示圖片Vue
- Qt for Android (三) 開啟Android相簿並選一個圖片進行顯示QTAndroid
- Maui 讀取外部檔案顯示到Blazor中UIBlazor
- 微信小程式-拍照或選擇圖片並上傳檔案微信小程式
- Android中顯示html標籤或者帶圖片AndroidHTML
- Android儲存圖片到系統相簿Android
- word圖文混排複製到KindEditor圖片不顯示
- word圖文混排複製到CuteEditor圖片不顯示
- 從庫中讀圖片顯示到頁面上的主要原始碼原始碼
- 設計完圖示如何選擇圖示格式給到開發?
- Flutter 基礎控制元件篇-->圖片(Image)、圖示(Icon)Flutter控制元件
- 短視訊帶貨原始碼,儲存圖片到相簿/相簿原始碼
- 呼叫系統檔案管理器選擇圖片,呼叫系統裁剪AIP對圖片處理,顯示裁剪之後的圖片...AI
- Picasa相簿圖片不顯示的解決辦法
- 小程式生成二維碼圖片儲存相簿並分享到朋友圈
- 小程式–儲存圖片到相簿功能實現
- 遍歷當前目錄下的所有HTML檔案,並且顯示到螢幕中HTML
- asp.net 使用FileUpload控制元件上傳並顯示圖片ASP.NET控制元件
- 【JavaScript】拖拽圖片檔案顯示縮圖 + div點選模擬 input[type=file]JavaScript
- Android 拍照、選擇圖片並裁剪Android
- Android上傳圖片之呼叫系統拍照和從相簿選擇圖片Android
- WinPE中如何改變檔案顯示圖示
- Android生成圖片並放入相簿Android
- 安卓6.0以上從相簿選擇圖片,圖片壓縮及動態許可權安卓
- Java讀取本地檔案,並顯示在JSP檔案中JavaJS
- android開發筆記之內建圖片到相簿Android筆記
- iOS 相簿選中多張圖片iOS
- 動態的新增ImageView到LinearLayout中並居中顯示View
- win10 選擇圖示怎麼顯示工作列_win10選擇快速操作圖示如何顯示在工作列Win10
- login介面 checkbox選擇顯示或者隱藏密碼密碼
- 載入JPGE圖象檔案到DirectDraw的表面中(轉)
- java匯出圖片,拼接多個圖片, 拼接文字和圖片 到一個圖片檔案Java
- Android將view儲存為圖片並放在相簿中AndroidView
- 關於vue打包後scss檔案中背景圖片不顯示問題VueCSS
- 相簿圖片多選、反選 swift實現Swift
- QLabel顯示圖片 ,並實現縮放