第14章_HarmonyOs開發圖解 圖像
第14章 HarmonyOs開發圖解 圖像HarmonyOS 學習系統 | 階段三高級深耕期學習目標序號能力1掌握圖像解碼ImageSource與編碼ImagePacker的完整流程2能夠使用 PixelMap 進行像素級操作3掌握圖像縮放、裁剪、EXIF 信息讀取等常用功能核心圖解內容講解14.1 圖像處理概述HarmonyOS 的圖像處理模塊圍繞三個核心類展開ImageSource圖像源/解碼器、PixelMap位圖/像素容器、ImagePacker圖像編碼器。這三個類組成了讀取 - 處理 - 保存的完整圖像處理管線。生活化類比PixelMap 就像樂高底板圖像解碼就像拆快遞包裝JPEG/PNG 圖片就像被打包好的快遞里面是像素數據但被壓縮了。解碼Decode就是拆開包裝把像素數據整齊地擺放在一塊樂高底板上——這塊底板就是PixelMap每個格子就是一個像素點的顏色值。編碼Encode則反過來把底板上的像素重新打包壓縮成圖片格式。14.2 圖像解碼ImageSource 負責從各種來源文件流、資源文件、字節數組讀取圖片并解碼為 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);// 紅色// 從顏色數組創建 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)從輸入流創建圖像源ImageSource.create(is, new SourceOptions())createPixelmap(opts)解碼為 PixelMapimageSource.createPixelmap(opts)PixelMap.create(colors, w, h, fmt)從顏色數組創建位圖PixelMap.create(colors, w, h, ARGB_8888)readPixel(position)讀取指定位置像素pixelMap.readPixel(new Position(100,200))writePixel(position, color)寫入指定位置像素pixelMap.writePixel(pos, 0xFFFF0000)ImagePacker.create()創建圖像編碼器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 字節/像素。我曾在列表頁同時加載了 20 張大圖直接 OOM 崩潰。解決辦法縮放解碼在DecodingOptions中設置desiredSize按顯示尺寸縮放后再加載。列表頁縮略圖 200x200 就夠了詳情頁才加載原圖。還有一個坑PixelMap和ImageSource用完必須調release()它們持有 Native 資源C/C 層內存Java 的 GC 管不了。我曾在循環里創建了幾十個 PixelMap 不釋放最后系統直接殺掉了我的進程。必做實操任務序號任務難度1實現圖片解碼并在 Image 組件上顯示低2實現圖片縮放裁剪設置 DecodingOptions 的 desiredSize 和 desiredRegion中3讀取照片的 EXIF 信息經緯度、海拔并在界面上展示中4實現圖片格式轉換PNG - JPEG中5實現一個簡單的圖片瀏覽器支持縮放和滑動瀏覽高學習檢查清單能說出 ImageSource、PixelMap、ImagePacker 三者的關系能實現圖片解碼并在 UI 上顯示能使用 DecodingOptions 實現縮放解碼避免 OOM能使用 ImagePacker 將 PixelMap 保存為 JPEG/PNG能使用 readPixel/writePixel 進行像素級操作能讀取照片的 EXIF GPS 信息知道為什么 PixelMap 和 ImageSource 必須手動 release理解圖片分辨率與內存占用的關系進階方向學習圖像變換旋轉、翻轉、裁剪API 的使用探索 PixelMap 的圖像特效處理灰度、模糊、亮度調節結合第 21 章 OCR 能力實現拍照識別文字的完整流程和 ImageSource 必須手動 release理解圖片分辨率與內存占用的關系進階方向學習圖像變換旋轉、翻轉、裁剪API 的使用探索 PixelMap 的圖像特效處理灰度、模糊、亮度調節結合第 21 章 OCR 能力實現拍照識別文字的完整流程

相關新聞

終極免費激活指南:KMS智能激活工具完整使用教程

終極免費激活指南:KMS智能激活工具完整使用教程

終極免費激活指南:KMS智能激活工具完整使用教程 【免費下載鏈接】KMS_VL_ALL_AIO Smart Activation Script 項目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 還在為Windows系統激活和Office辦公軟件激活而煩惱嗎?KMS_VL_ALL_AIO是一…

2026/7/29 11:56:27 閱讀更多
小白也能懂的 ML.NET:手把手帶你落地第一個 AI 功能

小白也能懂的 ML.NET:手把手帶你落地第一個 AI 功能

經常有剛入行的.NET朋友問我:想做點AI相關的功能,是不是必須先學Python?數學不好是不是就入不了門? 其實真不是。對于絕大多數業務場景的AI需求——比如判斷用戶會不會流失、預測產品合不合格、給工單自動分類,我們完全…

2026/7/29 11:56:27 閱讀更多
產品經理 開需求會:2026年3款VIVO錄音轉文字哪個更好用

產品經理 開需求會:2026年3款VIVO錄音轉文字哪個更好用

按人群先給建議 針對2026年VIVO機型上的三款錄音轉文字工具,我們不做單一萬能排名,按場景給明確結論:如果只要基礎免費轉寫,優先選系統自帶的錄音轉文字助手;如果是開發者需要集成轉寫能力,可考慮Assembly…

2026/7/29 11:56:27 閱讀更多
Neo4j與Docker容器化部署實戰指南

Neo4j與Docker容器化部署實戰指南

1. Neo4j與Docker的黃金組合在數據爆炸式增長的時代,圖數據庫憑借其強大的關聯數據處理能力脫穎而出。作為圖數據庫領域的標桿產品,Neo4j通過節點、關系和屬性來存儲數據,特別適合處理復雜的關系網絡。而Docker作為輕量級的容器化技術&#x…

2026/7/29 11:56:27 閱讀更多
AI文獻綜述工具Scispace的核心功能與實戰指南

AI文獻綜述工具Scispace的核心功能與實戰指南

1. 論文綜述工具的革命性突破 上周在實驗室組會上,師弟興奮地分享了他的新發現:"師兄,我找到個寫文獻綜述的神器!Nature最新認證的!"作為常年被文獻海洋淹沒的科研狗,我立刻來了興趣。這款名為&q…

2026/7/29 11:46:27 閱讀更多