成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編輯圖片—OpenHarmony

系統 OpenHarmony
本例即為大家介紹如何獲取圖片的pixelMap數據,并通過pixelMap對圖片進行常見的編輯操作。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

編輯圖片

場景說明

圖片編輯是在應用中經常用到的功能,比如相機拍完照片后可以對照片進行編輯;截圖后可以對截圖進行編輯;可以對圖庫中的圖片進行編輯等。本例即為大家介紹如何獲取圖片的pixelMap數據,并通過pixelMap對圖片進行常見的編輯操作。

效果呈現

本例最終效果如下:

編輯圖片(OpenHarmony)-開源基礎軟件社區

運行環境

本例基于以下環境開發,開發者也可以基于其他適配的版本進行開發:

  • IDE: DevEco Studio 3.1 Release
  • SDK: Ohos_sdk_public 3.2.12.5(API Version 9 Release)

實現思路

本例中展示的是對資源文件中的圖片進行編輯,編輯操作主要分為以下三步:

  1. 對圖片解碼,獲取到pixelMap:先通過上下文context獲取到資源管理器resourceManager,然后通過資源管理器獲取到圖片數據,然后獲取圖片的ArrayBuffer,最后通過ArrayBuffer創建imageSource,獲取到pixelMap,完成圖片解碼。
  2. 編輯pixelMap:獲取到pixelMap后就可以針對pixelMap進行裁剪、縮放、偏移、旋轉、翻轉、調節透明度等操作。
  3. 將編輯好的pixelMap渲染顯示出來:完成對pixelMap的編輯后,可以通過Image組件將編輯后的pixelMap渲染顯示出來。

開發步驟

由于本例重點講解圖片編輯,所以開發步驟會著重講解相關實現,不相關的內容不做介紹,全量代碼可參考完整代碼章節。

1、對圖片進行解碼。
先通過上下文context獲取到資源管理器resourceManager,然后通過資源管理器獲取到圖片數據,然后獲取圖片的ArrayBuffer,最后通過ArrayBuffer創建imageSource,獲取到pixelMap,完成圖片解碼。
具體代碼如下:

async get_pixelmap(){
  // 獲取resourceManager資源管理
  const context = getContext(this)
  const resourceMgr = context.resourceManager
  // 獲取rawfile文件夾下httpimage.PNG的ArrayBuffer
  const fileData = await resourceMgr.getMediaContent($r('app.media.httpimage'))
  const buffer = fileData.buffer
  // 創建imageSource
  const imageSource = image.createImageSource(buffer)
  // 創建PixelMap
  const pixelMap = await imageSource.createPixelMap()
  return pixelMap
}

2、編輯pixelMap。
分別通過以下方法對pixelMap進行裁剪、縮放、偏移、旋轉、翻轉、調節透明度等操作:crop、scale、translate、rotate、flip、opacity。
具體代碼如下:

// 對pixelMap進行裁剪
async crop_image(){
  let pixelMap = await this.get_pixelmap()
  pixelMap.crop({x:0,y:0,size:{height:300,width:300}})
  this.imagePixelMap = pixelMap
}
// 對pixelMap進行縮放
async scale_image(){
  let pixelMap = await this.get_pixelmap()
  pixelMap.scale(0.5,0.5)
  this.imagePixelMap = pixelMap
}
// 對pixelMap進行偏移
async translate_image(){
  let pixelMap = await this.get_pixelmap()
  pixelMap.translate(100,100);
  this.imagePixelMap = pixelMap
}
// 對pixelMap進行旋轉
async rotate_image(){
  let pixelMap = await this.get_pixelmap()
  pixelMap.rotate(90);
  this.imagePixelMap = pixelMap
}
// 對pixelMap進行翻轉
async flip_image(){
  let pixelMap = await this.get_pixelmap()
  pixelMap.flip(false, true);
  this.imagePixelMap = pixelMap
}
// 對pixelMap進行透明度調整
async opacity_image(){
  let pixelMap = await this.get_pixelmap()
  pixelMap.opacity(0.5);
  this.imagePixelMap = pixelMap
}

3、通過Image組件將編輯后的pixelMap渲染顯示出來。
第2步中將編輯好的pixelMap傳遞給狀態變量imagePixelMap,本步中直接將imagePixelMap傳入Image組件進行渲染顯示。
具體代碼如下:

if(!this.edit){
  Row(){
    Image($r('app.media.httpimage')).objectFit(ImageFit.None)
  }.width('100%').height('50%').backgroundColor('#F0F0F0')
}else{
  Row(){
    // 將編輯好的pixelMap傳遞給狀態變量imagePixelMap后,通過Image組件進行渲染
    Image(this.imagePixelMap).objectFit(ImageFit.None)
  }.width('100%').height('50%').backgroundColor('#F0F0F0')
}

完整代碼

本例完整代碼如下:

import image from '@ohos.multimedia.image';

@Entry
@Component
struct ImageEdit{
  @State imagePixelMap:PixelMap = undefined
  @State edit:boolean = false

  @Builder buttonModel($$:{textContent,action}){
    Button($$.textContent)
      .fontSize(14)
      .height(30)
      .width(60)
      .borderRadius(10)
      .backgroundColor('#E8A027')
      .onClick(()=>{
        $$.action
        this.edit = true
      })
  }

  async get_pixelmap(){
    // 獲取resourceManager資源管理
    const context = getContext(this)
    const resourceMgr = context.resourceManager
    // 獲取rawfile文件夾下httpimage.PNG的ArrayBuffer
    const fileData = await resourceMgr.getMediaContent($r('app.media.httpimage'))
    const buffer = fileData.buffer
    // 創建imageSource
    const imageSource = image.createImageSource(buffer)
    // 創建PixelMap
    const pixelMap = await imageSource.createPixelMap()
    return pixelMap
  }

  // 對pixelMap進行裁剪
  async crop_image(){
    let pixelMap = await this.get_pixelmap()
    pixelMap.crop({x:0,y:0,size:{height:300,width:300}})
    this.imagePixelMap = pixelMap
  }

  // 對pixelMap進行縮放
  async scale_image(){
    let pixelMap = await this.get_pixelmap()
    pixelMap.scale(0.5,0.5)
    this.imagePixelMap = pixelMap
  }

  // 對pixelMap進行偏移
  async translate_image(){
    let pixelMap = await this.get_pixelmap()
    pixelMap.translate(100,100);
    this.imagePixelMap = pixelMap
  }

  // 對pixelMap進行旋轉
  async rotate_image(){
    let pixelMap = await this.get_pixelmap()
    pixelMap.rotate(90);
    this.imagePixelMap = pixelMap
  }

  // 對pixelMap進行翻轉
  async flip_image(){
    let pixelMap = await this.get_pixelmap()
    pixelMap.flip(false, true);
    this.imagePixelMap = pixelMap
  }

  // 對pixelMap進行透明度調整
  async opacity_image(){
    let pixelMap = await this.get_pixelmap()
    pixelMap.opacity(0.5);
    this.imagePixelMap = pixelMap
  }

  build(){
    Column(){
      if(!this.edit){
        Row(){
          Image($r('app.media.httpimage')).objectFit(ImageFit.None)
        }.width('100%').height('50%').backgroundColor('#F0F0F0')
      }else{
        Row(){
          // 將編輯好的pixelMap傳遞給狀態變量imagePixelMap后,通過Image組件進行渲染
          Image(this.imagePixelMap).objectFit(ImageFit.None)
        }.width('100%').height('50%').backgroundColor('#F0F0F0')
      }

      Flex({wrap:FlexWrap.Wrap,justifyContent:FlexAlign.SpaceEvenly}){
        this.buttonModel({textContent:'裁剪',action:this.crop_image()})
        this.buttonModel({textContent:'縮放',action:this.scale_image()})
        this.buttonModel({textContent:'偏移',action:this.translate_image()})
        this.buttonModel({textContent:'旋轉',action:this.rotate_image()})
        this.buttonModel({textContent:'翻轉',action:this.flip_image()})
        this.buttonModel({textContent:'透明度',action:this.opacity_image()})
        Button('還原')
          .fontSize(14)
          .height(30)
          .width(60)
          .borderRadius(10)
          .margin({top:20})
          .backgroundColor('#A4AE77')
          .onClick(()=>{
            this.edit = false
          })
      }
      .margin({top:100})
      .height('100%')
      .width('100%')
    }
    .height('100%')
    .width('100%')
  }
}

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-05-26 14:50:15

ArkUITS擴展

2023-01-02 13:12:07

模型圖像

2024-02-05 12:45:33

AI訓練

2024-04-03 13:33:43

2020-06-28 08:21:07

Chrome瀏覽器Chrome瀏覽器

2021-06-06 16:05:31

OpenHarmony

2022-04-11 14:04:29

散點圖Harmony操作系統

2025-01-17 10:30:00

Adobe生成式AI工具

2023-04-17 16:14:55

靜態訂閱鴻蒙

2023-08-24 16:45:16

應用開發父自定義組件

2022-03-03 18:39:01

Harmonyioremap鴻蒙

2024-07-26 16:39:33

鴻蒙系統開源構建系統

2023-04-10 09:44:22

內核鼠標調試鴻蒙

2024-04-09 09:34:36

鴻蒙系統燒錄操作系統

2023-08-25 09:17:38

2022-03-02 16:08:31

Harmony應用開發鴻蒙

2023-06-30 14:03:15

GIMP 3.0圖片編輯器

2023-08-02 07:25:52

在線圖片編輯器

2021-08-26 05:15:22

圖片編輯器 H5-DooringMitu-Doorin
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费在线观看成年人视频 | 国产主播第一页 | 成人在线小视频 | 三级视频国产 | 五月激情婷婷六月 | 亚洲成人日韩 | 欧美日韩国产在线观看 | 黄色在线免费观看视频网站 | 成人久久久久 | 日韩欧美三级 | 日韩和的一区二在线 | 一级黄色毛片免费 | av黄色网| 欧美日韩成人在线 | 成人超碰 | 欧美一级久久 | 观看毛片| 日韩看片 | 91av免费看| 国产一区中文字幕 | 热久久免费视频 | 国产精品中文在线 | 成人一区二区三区在线 | h视频在线免费 | 国产一区| 性做久久久久久免费观看欧美 | 日韩av一区二区在线 | 成人免费视频网址 | 欧美日韩久 | 一区二区三区欧美在线 | 在线电影日韩 | 久久久久久久亚洲精品 | 亚洲精品成人 | 国产黄色在线观看 | 蜜桃视频在线观看免费视频网站www | 久久久免费电影 | 国产精品日韩一区二区 | 国产精品18hdxxxⅹ在线 | 日本黄色免费视频 | 久久精品一区 | 91精品国产麻豆 |