日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HarmonyOS之深入解析图像的位图操作和属性解码

發布時間:2024/5/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HarmonyOS之深入解析图像的位图操作和属性解码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、位圖操作

① 應用場景
  • 位圖操作就是指對 PixelMap 圖像進行相關的操作,比如創建、查詢信息、讀寫像素數據等。
② 位圖操作 API
  • 位圖操作類 PixelMap 的主要接口:
接口名描述
create(InitializationOptions opts)根據圖像大小、像素格式、alpha類型等初始化選項創建PixelMap
create(int[] colors, InitializationOptions opts)根據圖像大小、像素格式、alpha類型等初始化選項,以像素顏色數組為數據源創建PixelMap
create(int[] colors, int offset, int stride, InitializationOptions opts)根據圖像大小、像素格式、alpha類型等初始化選項,以像素顏色數組、起始偏移量、行像素大小描述的數據源創建PixelMap
create(PixelMap source, InitializationOptions opts)根據圖像大小、像素格式、alpha類型等初始化選項,以源PixelMap為數據源創建PixelMap
create(PixelMap source, Rect srcRegion, InitializationOptions opts)根據圖像大小、像素格式、alpha類型等初始化選項,以源PixelMap、源裁剪區域描述的數據源創建PixelMap
getBytesNumberPerRow()獲取每行像素數據占用的字節數
getPixelBytesCapacity()獲取存儲Pixelmap像素數據的內存容量
isEditable()判斷PixelMap是否允許修改
isSameImage(PixelMap other)判斷兩個圖像是否相同,包括ImageInfo屬性信息和像素數據
readPixel(Position pos)讀取指定位置像素的顏色值,返回的顏色格式為PixelFormat.ARGB_8888
readPixels(int[] pixels, int offset, int stride, Rect region)讀取指定區域像素的顏色值,輸出到以起始偏移量、行像素大小描述的像素數組,返回的顏色格式為PixelFormat.ARGB_8888
readPixels(Buffer dst)讀取像素的顏色值到緩沖區,返回的數據是PixelMap中像素數據的原樣拷貝,即返回的顏色數據格式與PixelMap中像素格式一致
resetConfig(Size size, PixelFormat pixelFormat)重置PixelMap的大小和像素格式配置,但不會改變原有的像素數據也不會重新分配像素數據的內存,重置后圖像數據的字節數不能超過PixelMap的內存容量
setAlphaType(AlphaType alphaType)設置PixelMap的Alpha類型
writePixel(Position pos, int color)向指定位置像素寫入顏色值,寫入顏色格式為PixelFormat.ARGB_8888
writePixels(int[] pixels, int offset, int stride, Rect region)將像素顏色數組、起始偏移量、行像素的個數描述的源像素數據寫入PixelMap的指定區域,寫入顏色格式為PixelFormat.ARGB_8888
writePixels(Buffer src)將緩沖區描述的源像素數據寫入PixelMap,寫入的數據將原樣覆蓋PixelMap中的像素數據,即寫入數據的顏色格式應與PixelMap的配置兼容
writePixels(int color)將所有像素都填充為指定的顏色值,寫入顏色格式為 PixelFormat.ARGB_8888
getPixelBytesNumber()獲取全部像素數據包含的字節數
setBaseDensity(int baseDensity)設置PixelMap的基礎像素密度值
getBaseDensity()獲取PixelMap的基礎像素密度值
setUseMipmap(boolean useMipmap)設置PixelMap渲染是否使用mipmap
useMipmap()獲取PixelMap渲染是否使用mipmap
getNinePatchChunk()獲取圖像的NinePatchChunk數據
getFitDensitySize(int targetDensity)獲取適應目標像素密度的圖像縮放的尺寸
getImageInfo()獲取圖像基本信息
release()釋放對象關聯的本地資源
③ 位圖操作流程
  • 創建位圖對象 PixelMap:
// 從像素顏色數組創建int[] defaultColors = new int[] {5, 5, 5, 5, 6, 6, 3, 3, 3, 0};PixelMap.InitializationOptions initializationOptions = new PixelMap.InitializationOptions();initializationOptions.size = new Size(3, 2);initializationOptions.pixelFormat = PixelFormat.ARGB_8888;initializationOptions.editable = true;PixelMap pixelMap1 = PixelMap.create(defaultColors, initializationOptions);// 指定初始化選項創建PixelMap pixelMap2 = PixelMap.create(initializationOptions);// 以另外一個PixelMap作為數據源創建PixelMap pixelMap3 = PixelMap.create(pixelMap2, initializationOptions);
  • 從位圖對象中獲取信息:
long capacity = pixelMap.getPixelBytesCapacity();long bytesNumber = pixelMap.getPixelBytesNumber();int rowBytes = pixelMap.getBytesNumberPerRow();byte[] ninePatchData = pixelMap.getNinePatchChunk();
  • 讀寫位圖像素數據:
// 讀取指定位置像素int color = pixelMap.readPixel(new Position(1, 1));// 讀取指定區域像素int[] pixelArray = new int[50];Rect region = new Rect(0, 0, 10, 5);pixelMap.readPixels(pixelArray, 0, 10, region);// 讀取像素到BufferIntBuffer pixelBuf = IntBuffer.allocate(50);pixelMap.readPixels(pixelBuf);// 在指定位置寫入像素pixelMap.writePixel(new Position(1, 1), 0xFF112233);// 在指定區域寫入像素pixelMap.writePixels(pixelArray, 0, 10, region);// 寫入Buffer中的像素pixelMap.writePixels(intBuf);

二、圖像屬性解碼

① 應用場景
  • 圖像屬性解碼就是獲取圖像中包含的屬性信息,比如 EXIF 屬性。
② 屬性解碼 API
  • 圖像屬性解碼的功能主要由 ImageSource 和 ExifUtils 提供。
  • ImageSource 的主要接口:
接口名描述
getThumbnailInfo()獲取嵌入圖像文件的縮略圖的基本信息
getImageThumbnailBytes()獲取嵌入圖像文件縮略圖的原始數據
getThumbnailFormat()獲取嵌入圖像文件縮略圖的格式
  • ExifUtils 的主要接口:
接口名描述
getLatLong(ImageSource imageSource)獲取嵌入圖像文件的經緯度信息
getAltitude(ImageSource imageSource, double defaultValue)獲取嵌入圖像文件的海拔信息
③ 屬性解碼流程
  • 創建圖像數據源 ImageSource 對象,可以通過 SourceOptions 指定數據源的格式信息,此格式信息僅為給解碼器的提示,正確提供能幫助提高解碼效率,如果不設置或設置不正確,會自動檢測正確的圖像格式。
ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();srcOpts.formatHint = "image/jpeg";String pathName = "/sdcard/image.jpg";ImageSource imageSource = ImageSource.create(pathName, srcOpts);
  • 獲取縮略圖信息:
int format = imageSource.getThumbnailFormat();byte[] thumbnailBytes = imageSource.getImageThumbnailBytes();// 將縮略圖解碼為PixelMap對象ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();PixelMap thumbnailPixelmap = imageSource.createThumbnailPixelmap(decodingOpts, false);

總結

以上是生活随笔為你收集整理的HarmonyOS之深入解析图像的位图操作和属性解码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。