HarmonyOS:如何將圖片轉為PixelMap并進行圖片緩存策略

前言:在HarmonyOS項目開發中,我們使用Ark-Ts語言開發項目。我們有個功能是拍照,除了正常顯示出來,并且上傳服務器。我在開發過程中,遇到的問題是,如果離開這個頁面再回到當前頁面仍要顯示圖片,那我的思路就是存儲在沙盒,重新回到這個頁面先去沙盒里面查找照片,如果找到就顯示出來。

流程圖:

請添加圖片描述

1.模擬拍照:
模擬拍照方法
takePhoto(){let pixelMap1 = await SnapshotUtil.snapshot()//添加水印信息(此處省略)//調用步驟2.//照片存儲到本地,并返回路徑let filePath:string = await WinPixelImageTool.asyncSavePixelImageToFileCache(waterMarkPixelMap);//存儲照片存儲沙盒路徑let imageKey = '自定義key值'PreferencesManager.set(imageKey,filePath);}
/*** 獲取窗口截圖,使用Promise異步回調。* @param windowClass 不傳默認截圖主窗口* @returns*/static async snapshot(windowClass?: window.Window): Promise<image.PixelMap> {return (windowClass ?? AppUtil.getMainWindow()).snapshot();}
2.生成圖片存儲路徑
static asyncSavePixelImageToFileCache(pixelIamge:PixelMap){return new Promise<string>((resolve)=>{const imagePackerApi: image.ImagePacker = image.createImagePacker();let packOpts : image.PackingOption = { format:"image/png", quality:100 };const context : Context = AppUtil.getContext();let fileName = DateUtil.getTodayTime().toString();let path : string = context.cacheDir + `/sfa`;if (!FileUtil.accessSync(path)) {FileUtil.mkdirSync(path)}path = `${path}/pixel_map_${fileName}.png`let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);imagePackerApi.packToFile(pixelIamge, file.fd, packOpts,(error: BusinessError): void => {if (error) {resolve('')}else {// let fileUriPath = fileUri.getUriFromPath(path);resolve(path)}})})}

//存儲方法

static set(key: string, value: dataPreferences.ValueType) {if (context==undefined) {context = AppUtil.getContext()}let preferences = dataPreferences.getPreferencesSync(context, { name: preferencesName });preferences?.putSync(key, value);preferences?.flush();}
3.如何將圖片轉為PixelMap并且顯示出來,方法如下:

/*

  • 沙盒目錄下的照片轉為image.PixelMap
  • imageId是存儲照片沙盒路徑的key
  • localImagePath 是照片的存儲沙盒路徑
    */
//通過Imagekey獲取圖片,比如門頭照顯示就是此方法static getImageByImageId(imageId:string):Promise<image.PixelMap> {return new Promise<image.PixelMap>(async (resolve,reject) => {let localImagePath =  PreferencesManager.get(imageId) as string;if (localImagePath&&localImagePath.length>0) {let tmpImagePixelMap =  await WinImagePixelMapUtils.getImagePixelMapWithFilePath(localImagePath);resolve(tmpImagePixelMap.pixelMap);}else {reject();}})}//WinImagePixelMapUtils類
static async getImagePixelMapWithFilePath(filePath:string){let imageSource = image.createImageSource(filePath);return await imageSource2PixelMap(imageSource);}export  async function imageSource2PixelMap(imageSource: image.ImageSource): Promise<ImagePixelMap> {const imageInfo: image.ImageInfo = await imageSource.getImageInfo();const height = imageInfo.size.height;const width = imageInfo.size.width;const options: image.DecodingOptions = {editable: true,desiredSize: { height, width }};const pixelMap: PixelMap = await imageSource.createPixelMap(options);const result: ImagePixelMap = { pixelMap, width, height };return result;
}

getImageByImageId
通過此方法找到沙盒里面的圖片,
使用Image組件可以直接加載tmpImagePixelMap.pixelMap

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72600.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025.3.9機器學習筆記:文獻閱讀

2025.3.9周報 一、文獻閱讀題目信息摘要Abstract創新點網絡架構實驗結論不足以及展望 一、文獻閱讀 題目信息 題目&#xff1a; Time-series generative adversarial networks for flood forecasting期刊&#xff1a; Journal of Hydrology作者&#xff1a; Peiyao Weng, Yu …

linux固定IP并解決虛擬機無法ping其他電腦問題

linux固定IP并解決虛擬機無法ping其他電腦問題 1.找到網卡文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 2.編輯文件信息 BOOTPROTO 這個dhcp改為static#添加以下內容IPADDR<你的IP地址>NETMASK<子網掩碼>&#xff0c;例如255.255.255.0。GATEWAY<網…

Spring實戰spring-ai運行

目錄 1. 配置 2 .搭建項目 3. 查看對應依賴 3.1 OpenAI 依賴 3.2 配置 OpenAI API 密鑰 application.properties application.yml 4. openai實戰 5. 運行和測試 6. 高級配置 示例&#xff1a;配置模型和參數 解釋&#xff1a; 7. 處理異常和錯誤 示例&#xff1a;…

docker:配置 Docker 鏡像加速器

1 鏡像加速器介紹 默認情況下&#xff0c;將來從docker hub&#xff08;https://hub.docker.com/&#xff09;上下載docker鏡像&#xff0c;太慢。一般都會配置鏡像加速器&#xff1a; USTC&#xff1a;中科大鏡像加速器&#xff08;https://docker.mirrors.ustc.edu.cn&…

[內網安全] Windows 本地認證 — NTLM 哈希和 LM 哈希

關注這個專欄的其他相關筆記&#xff1a;[內網安全] 內網滲透 - 學習手冊-CSDN博客 0x01&#xff1a;SAM 文件 & Windows 本地認證流程 0x0101&#xff1a;SAM 文件簡介 Windows 本地賬戶的登錄密碼是存儲在系統本地的 SAM 文件中的&#xff0c;在登錄 Windows 的時候&am…

算法-圖-dijkstra 最短路徑

理論知識 dijkstra三部曲 樸素版dijkstra 模擬過程 堆優化版dijksra 經典模版例題 Dijkstra求最短路 I 參加科學大會&#xff08;第六期模擬筆試&#xff09;--模版題 網絡延遲 ref 理論知識 最短路是圖論中的經典問題即&#xff1a;給出一個有向圖&#xff0c;一…

Qt添加MySql數據庫驅動

文章目錄 一. 安裝MySql二.編譯mysql動態鏈接庫 Qt版本&#xff1a;5.14.2 MySql版本&#xff1a;8.0.41 一. 安裝MySql 參考這里進行安裝&#xff1a;https://blog.csdn.net/qq_30150579/article/details/146042922 將mysql安裝目錄里的bin&#xff0c;include和lib拷貝出來…

淺論數據庫聚合:合理使用LambdaQueryWrapper和XML

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、數據庫聚合替代內存計算&#xff08;關鍵優化&#xff09;二、批量處理優化四、區域特殊處理解耦五、防御性編程增強 前言 技術認知點&#xff1a;使用 XM…

Ubuntu 22.04安裝NVIDIA A30顯卡驅動

一、安裝前準備 1.禁用Nouveau驅動 Ubuntu默認使用開源Nouveau驅動&#xff0c;需要手動禁用&#xff1a; vim /etc/modprobe.d/blacklist-nouveau.conf # 添加以下內容&#xff1a; blacklist nouveau options nouveau modeset0 # 更新內核并重啟&#xff1a; update-initr…

Docker Desktop 4.38 安裝與配置全流程指南(Windows平臺)

一、軟件定位與特性 Docker Desktop 是容器化應用開發與部署的一體化工具&#xff0c;支持在本地環境創建、管理和運行Docker容器。4.38版本新增GPU加速支持、WSL 2性能優化和Kubernetes 1.28集群管理功能&#xff0c;適用于微服務開發、CI/CD流水線搭建等場景。 二、安裝環境…

音視頻入門基礎:RTP專題(15)——FFmpeg源碼中,獲取RTP的視頻信息的實現

一、引言 通過FFmpeg命令可以獲取到SDP文件描述的RTP流的視頻壓縮編碼格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、幀率信息&#xff1a; ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 本文以H.264為例講述FFmpeg到底是從哪個地方獲取到這…

深度學習---卷積神經網絡

一、卷積尺寸計算公式 二、池化 池化分為最大池化和平均池化 最常用的就是最大池化&#xff0c;可以認為最大池化不需要引入計算&#xff0c;而平均池化需要引出計算&#xff08;計算平均數&#xff09; 每種池化還分為Pooling和AdaptiveAvgPool Pooling(2)就是每2*2個格子…

netty中Future和ChannelHandler

netty中的Future&#xff0c;繼承自 jdk中的Future&#xff0c;&#xff0c; jdk中的Future&#xff0c;很垃圾&#xff0c;只能同步阻塞獲取結果&#xff0c;&#xff0c;&#xff0c; netty中的Future進行了升級&#xff0c;&#xff0c;可以addListener()異步獲取結果&…

java 初學知識點總結

自己總結著玩 1.基本框架 public class HelloWorld{ public static void main(String[] args){ }//類名用大寫字母開頭 } 2.輸入&#xff1a; (1)Scanner:可讀取各種類型&#xff0c;字符串相當于cin>>; Scanner anew Scanner(System.in); Scan…

質量屬性場景描述

為了精確描述軟件系統的質量屬性&#xff0c;通常采用質量屬性場景&#xff08;Quality Attribute Scenario&#xff09;作為描述質量屬性的手段。質量屬性場景是一個具體的質量屬性需求&#xff0c;使利益相關者與系統的交互的簡短陳述。 質量屬性場景是一種用于描述系統如何…

數據可攜帶權的多重價值與實踐思考

文章目錄 前言一、數據可攜帶權的提出與立法二、數據可攜帶權的多重價值1、推動數據要素市場化配置2、促進市場競爭與創新3、強化個人數據權益 三、數據可攜帶權的實踐挑戰1、數據安全與隱私保護面臨風險2、接口差異導致數據遷移成本高昂3、可攜帶的數據范圍尚存爭議 數據可攜帶…

藍橋每日打卡--分考場

#藍橋#JAVA#分考場 題目描述 n個人參加某項特殊考試。 為了公平&#xff0c;要求任何兩個認識的人不能分在同一個考場。 求是少需要分幾個考場才能滿足條件。 輸入描述 輸入格式&#xff1a; 第一行&#xff0c;一個整數n(1≤n≤100)&#xff0c;表示參加考試的人數。 …

RMAN備份bug-審計日志暴漲(select action from gv$session)

問題概述 /oracle 文件系統使用率過大&#xff0c;經過檢查是審計日志過大,/oracle 目錄 197G 審計日志占用70G&#xff0c;每6個小時產生大量審計日志&#xff0c;日志內容全是select action from gv$session &#xff0c;猜測可能跟備份有關&#xff0c; $>df -h /oracle…

在Blender中給SP分紋理組

在Blender中怎么分SP的紋理組/紋理集 其實紋理組就是材質 把同一組的材質分給同一組的模型 導入到sp里面自然就是同一個紋理組 把模型導入SP之后 就自動分好了

Nuxt:Nuxt3框架中onBeforeMount函數 和onBeforeRouteUpdate函數區別介紹 【超詳細!】

提示&#xff1a;在 Nuxt3 中&#xff0c;onBeforeMount 和 onBeforeRouteUpdate 是兩個不同場景下使用的鉤子函數&#xff0c;分別對應 Vue 組件生命周期 和 路由導航守衛。以下是它們的詳細解釋和對比&#xff1a; 文章目錄 一、onBeforeMount&#xff08;Vue 生命周期鉤子&a…