第14章_HarmonyOs開發(fā)圖解 圖像
第14章 HarmonyOs開發(fā)圖解 圖像HarmonyOS 學習系統(tǒng) | 階段三高級深耕期學習目標序號能力1掌握圖像解碼ImageSource與編碼ImagePacker的完整流程2能夠使用 PixelMap 進行像素級操作3掌握圖像縮放、裁剪、EXIF 信息讀取等常用功能核心圖解內容講解14.1 圖像處理概述HarmonyOS 的圖像處理模塊圍繞三個核心類展開ImageSource圖像源/解碼器、PixelMap位圖/像素容器、ImagePacker圖像編碼器。這三個類組成了讀取 - 處理 - 保存的完整圖像處理管線。生活化類比PixelMap 就像樂高底板圖像解碼就像拆快遞包裝JPEG/PNG 圖片就像被打包好的快遞里面是像素數據但被壓縮了。解碼Decode就是拆開包裝把像素數據整齊地擺放在一塊樂高底板上——這塊底板就是PixelMap每個格子就是一個像素點的顏色值。編碼Encode則反過來把底板上的像素重新打包壓縮成圖片格式。14.2 圖像解碼ImageSource 負責從各種來源文件流、資源文件、字節(jié)數組讀取圖片并解碼為 PixelMap。// 從資源文件解碼圖片InputStreamisgetResourceManager().getResource(MediaTable.INPUT);ImageSourceimageSourceImageSource.create(is,newSourceOptions());PixelMappixelMapimageSource.createPixelmap(newDecodingOptions());imageDecode.setPixelMap(pixelMap);// 帶縮放的解碼避免 OOMDecodingOptionsoptsnewDecodingOptions();opts.desiredSizenewSize(400,300);// 縮放到 400x300PixelMapscaledMapimageSource.createPixelmap(opts);14.3 圖像編碼與保存ImagePacker 負責將 PixelMap 編碼為指定格式的圖片文件并保存。// 編碼圖片保存為 JPEGImagePackerimagePackerImagePacker.create();imagePacker.initializePacking(newFile(path/to/output.jpg),newImagePacker.PackingOptions(image/jpeg,90)// JPEG格式質量90);imagePacker.addImage(pixelMap);imagePacker.finalizePacking();// 釋放資源pixelMap.release();imageSource.release();14.4 像素級操作PixelMap 支持對單個像素的讀寫操作可以用于圖像特效處理。// 讀取指定位置像素intcolorpixelMap.readPixel(newPosition(100,200));// 寫入指定位置像素pixelMap.writePixel(newPosition(100,200),0xFFFF0000);// 紅色// 從顏色數組創(chuàng)建 PixelMapint[]colorsnewint[width*height];// ... 填充顏色數據PixelMapcreatedMapPixelMap.create(colors,width,height,PixelFormat.ARGB_8888);14.5 EXIF 信息讀取通過 ExifUtils 可以讀取照片中嵌入的 GPS 坐標、拍攝時間等元數據。// 獲取照片 GPS 坐標double[]latLongExifUtils.getLatLong(imageSource);if(latLong!null){HiLog.info(TAG,緯度: latLong[0], 經度: latLong[1]);}代碼速查卡API功能示例ImageSource.create(stream, opts)從輸入流創(chuàng)建圖像源ImageSource.create(is, new SourceOptions())createPixelmap(opts)解碼為 PixelMapimageSource.createPixelmap(opts)PixelMap.create(colors, w, h, fmt)從顏色數組創(chuàng)建位圖PixelMap.create(colors, w, h, ARGB_8888)readPixel(position)讀取指定位置像素pixelMap.readPixel(new Position(100,200))writePixel(position, color)寫入指定位置像素pixelMap.writePixel(pos, 0xFFFF0000)ImagePacker.create()創(chuàng)建圖像編碼器ImagePacker.create()ExifUtils.getLatLong()獲取照片 GPS 坐標ExifUtils.getLatLong(imageSource)pixelMap.release()釋放 Native 資源pixelMap.release()與 Android/iOS 對比特性HarmonyOSAndroidiOS位圖類PixelMapBitmapCGImage / UIImage解碼ImageSourceBitmapFactoryImageIO編碼ImagePackerBitmap.compress()UIImageJPEGRepresentation()像素操作readPixel / writePixelgetPixel() / setPixel()CGContext 繪制EXIF 讀取ExifUtilsExifInterfaceCGImageDestination縮放解碼DecodingOptions.desiredSizeBitmapFactory.Options.inSampleSizeImageIO 縮略圖?? 踩坑回憶錄OOM為什么圖片一加載就崩潰一張 4000x3000 的圖片解碼后 PixelMap 占用約 48MB 內存4000 x 3000 x 4 字節(jié)/像素。我曾在列表頁同時加載了 20 張大圖直接 OOM 崩潰。解決辦法縮放解碼在DecodingOptions中設置desiredSize按顯示尺寸縮放后再加載。列表頁縮略圖 200x200 就夠了詳情頁才加載原圖。還有一個坑PixelMap和ImageSource用完必須調release()它們持有 Native 資源C/C 層內存Java 的 GC 管不了。我曾在循環(huán)里創(chuàng)建了幾十個 PixelMap 不釋放最后系統(tǒng)直接殺掉了我的進程。必做實操任務序號任務難度1實現(xiàn)圖片解碼并在 Image 組件上顯示低2實現(xiàn)圖片縮放裁剪設置 DecodingOptions 的 desiredSize 和 desiredRegion中3讀取照片的 EXIF 信息經緯度、海拔并在界面上展示中4實現(xiàn)圖片格式轉換PNG - JPEG中5實現(xiàn)一個簡單的圖片瀏覽器支持縮放和滑動瀏覽高學習檢查清單能說出 ImageSource、PixelMap、ImagePacker 三者的關系能實現(xiàn)圖片解碼并在 UI 上顯示能使用 DecodingOptions 實現(xiàn)縮放解碼避免 OOM能使用 ImagePacker 將 PixelMap 保存為 JPEG/PNG能使用 readPixel/writePixel 進行像素級操作能讀取照片的 EXIF GPS 信息知道為什么 PixelMap 和 ImageSource 必須手動 release理解圖片分辨率與內存占用的關系進階方向學習圖像變換旋轉、翻轉、裁剪API 的使用探索 PixelMap 的圖像特效處理灰度、模糊、亮度調節(jié)結合第 21 章 OCR 能力實現(xiàn)拍照識別文字的完整流程和 ImageSource 必須手動 release理解圖片分辨率與內存占用的關系進階方向學習圖像變換旋轉、翻轉、裁剪API 的使用探索 PixelMap 的圖像特效處理灰度、模糊、亮度調節(jié)結合第 21 章 OCR 能力實現(xiàn)拍照識別文字的完整流程

相關新聞

性價比高的重金屬檢測相關抗原抗體優(yōu)質源頭廠家

性價比高的重金屬檢測相關抗原抗體優(yōu)質源頭廠家

咱搞重金屬檢測的,找合適的抗原抗體源頭廠家可太重要了。我深耕重金屬檢測相關抗原抗體垂類5年了,對這行業(yè)的情況門兒清。先跟大家嘮嘮這行業(yè)的痛點。對高校和科研院所來說,進口的微球、納米材料供貨周期長,物流要是有點波動&…

2026/7/29 9:56:24 閱讀更多
無人機三維路徑規(guī)劃的NMOPSO算法與MATLAB實現(xiàn)

無人機三維路徑規(guī)劃的NMOPSO算法與MATLAB實現(xiàn)

1. 項目背景與核心挑戰(zhàn) 城市場景下的無人機三維路徑規(guī)劃是當前智能交通和物流配送領域的前沿課題。隨著2025年城市空中交通(UAM)概念的逐步落地,無人機需要在復雜的建筑群環(huán)境中實現(xiàn)安全、高效的自主飛行。這個過程中面臨三個核心挑戰(zhàn)&#x…

2026/7/29 9:56:24 閱讀更多
共筑國產 FPGA 生態(tài)!ALINX 攜車載視頻解決方案亮相 2026 紫光同創(chuàng)開發(fā)者大會

共筑國產 FPGA 生態(tài)!ALINX 攜車載視頻解決方案亮相 2026 紫光同創(chuàng)開發(fā)者大會

以“算力重構、智創(chuàng)無界”為主題的“2026紫光同創(chuàng)開發(fā)者大會”深圳站與成都站圓滿落幕。本次大會匯聚了來自通信網絡、工業(yè)控制、汽車電子、數據中心、邊緣AI、測試測量等領域的 300 余名工程師、行業(yè)伙伴與生態(tài)開發(fā)者,圍繞國產 FPGA 技術創(chuàng)新、AI 推理系統(tǒng)方案、工…

2026/7/29 9:46:23 閱讀更多