鴻蒙跳轉到相簿或者檔案選擇圖片並顯示到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
- Qt for Android (三) 開啟Android相簿並選一個圖片進行顯示QTAndroid
- js將選擇的圖片顯示在img中JS
- vue el-image 顯示圖片Vue
- 鴻蒙Navigation處理啟動頁跳轉到首頁問題鴻蒙Navigation
- Maui 讀取外部檔案顯示到Blazor中UIBlazor
- 鴻蒙無許可權實現圖片選擇拍照和錄影片鴻蒙
- Flutter 基礎控制元件篇-->圖片(Image)、圖示(Icon)Flutter控制元件
- 鴻蒙OS前端開發入門指南:網路圖片_Image渲染網路圖片鴻蒙前端
- el-image圖片預覽顯示bug
- BMP圖片的複製#顯示到螢幕
- 鴻蒙的js開發部模式18:鴻蒙的檔案上傳到python伺服器端鴻蒙JS模式Python伺服器
- 呼叫系統檔案管理器選擇圖片,呼叫系統裁剪AIP對圖片處理,顯示裁剪之後的圖片...AI
- word圖文混排複製到CuteEditor圖片不顯示
- word圖文混排複製到KindEditor圖片不顯示
- 短視訊帶貨原始碼,儲存圖片到相簿/相簿原始碼
- 設計完圖示如何選擇圖示格式給到開發?
- Android生成圖片並放入相簿Android
- 小程式生成二維碼圖片儲存相簿並分享到朋友圈
- 【JavaScript】拖拽圖片檔案顯示縮圖 + div點選模擬 input[type=file]JavaScript
- 小程式–儲存圖片到相簿功能實現
- 使用HiBurn燒錄鴻蒙.bin檔案到Hi3861開發板鴻蒙
- 鴻蒙專案實戰(六):識別本地圖片鴻蒙地圖
- 學習筆記(十六):ArkUi-顯示圖片 (Image)筆記UI
- 動態的新增ImageView到LinearLayout中並居中顯示View
- QLabel顯示圖片 ,並實現縮放
- 鴻蒙HarmonyOS實戰-ArkUI元件(Image)鴻蒙UI元件
- 關於vue打包後scss檔案中背景圖片不顯示問題VueCSS
- 安卓6.0以上從相簿選擇圖片,圖片壓縮及動態許可權安卓
- win10 選擇圖示怎麼顯示工作列_win10選擇快速操作圖示如何顯示在工作列Win10
- 小技巧:如何在Mac選單欄上顯示名字或者圖示Mac
- 短視訊平臺開發,點選連結、圖片自動跳轉到新的頁面
- 從Tensorflow模型檔案中解析並顯示網路結構圖(pb模型篇)模型
- 圖片裁剪並上傳到阿里雲oss阿里
- ReactNative IOS下Image標籤載入網路圖片不顯示ReactiOS
- 相簿 或者多圖在文件模型中的使用模型
- 鴻蒙安全控制元件簡介鴻蒙控制元件