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

編輯圖片—OpenHarmony

系統(tǒng) OpenHarmony
本例即為大家介紹如何獲取圖片的pixelMap數(shù)據(jù),并通過pixelMap對圖片進(jìn)行常見的編輯操作。

想了解更多關(guān)于開源的內(nèi)容,請訪問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

編輯圖片

場景說明

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

效果呈現(xiàn)

本例最終效果如下:

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

運(yùn)行環(huán)境

本例基于以下環(huán)境開發(fā),開發(fā)者也可以基于其他適配的版本進(jìn)行開發(fā):

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

實現(xiàn)思路

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

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

開發(fā)步驟

由于本例重點(diǎn)講解圖片編輯,所以開發(fā)步驟會著重講解相關(guān)實現(xiàn),不相關(guān)的內(nèi)容不做介紹,全量代碼可參考完整代碼章節(jié)。

1、對圖片進(jìn)行解碼。
先通過上下文context獲取到資源管理器resourceManager,然后通過資源管理器獲取到圖片數(shù)據(jù),然后獲取圖片的ArrayBuffer,最后通過ArrayBuffer創(chuàng)建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
  // 創(chuàng)建imageSource
  const imageSource = image.createImageSource(buffer)
  // 創(chuàng)建PixelMap
  const pixelMap = await imageSource.createPixelMap()
  return pixelMap
}

2、編輯pixelMap。
分別通過以下方法對pixelMap進(jìn)行裁剪、縮放、偏移、旋轉(zhuǎn)、翻轉(zhuǎn)、調(diào)節(jié)透明度等操作:crop、scale、translate、rotate、flip、opacity。
具體代碼如下:

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

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

if(!this.edit){
  Row(){
    Image($r('app.media.httpimage')).objectFit(ImageFit.None)
  }.width('100%').height('50%').backgroundColor('#F0F0F0')
}else{
  Row(){
    // 將編輯好的pixelMap傳遞給狀態(tài)變量imagePixelMap后,通過Image組件進(jìn)行渲染
    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
    // 創(chuàng)建imageSource
    const imageSource = image.createImageSource(buffer)
    // 創(chuàng)建PixelMap
    const pixelMap = await imageSource.createPixelMap()
    return pixelMap
  }

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

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

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

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

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

  // 對pixelMap進(jìn)行透明度調(diào)整
  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傳遞給狀態(tài)變量imagePixelMap后,通過Image組件進(jìn)行渲染
          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:'旋轉(zhuǎn)',action:this.rotate_image()})
        this.buttonModel({textContent:'翻轉(zhuǎn)',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%')
  }
}

想了解更多關(guān)于開源的內(nèi)容,請訪問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2022-05-26 14:50:15

ArkUITS擴(kuò)展

2023-01-02 13:12:07

模型圖像

2024-02-05 12:45:33

AI訓(xùn)練

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

散點(diǎn)圖Harmony操作系統(tǒng)

2025-01-17 10:30:00

Adobe生成式AI工具

2022-03-02 16:08:31

Harmony應(yīng)用開發(fā)鴻蒙

2023-04-17 16:14:55

靜態(tài)訂閱鴻蒙

2023-08-24 16:45:16

應(yīng)用開發(fā)父自定義組件

2022-03-03 18:39:01

Harmonyioremap鴻蒙

2024-04-09 09:34:36

鴻蒙系統(tǒng)燒錄操作系統(tǒng)

2023-08-25 09:17:38

2024-07-26 16:39:33

鴻蒙系統(tǒng)開源構(gòu)建系統(tǒng)

2023-04-10 09:44:22

內(nèi)核鼠標(biāo)調(diào)試鴻蒙

2023-06-30 14:03:15

GIMP 3.0圖片編輯器

2021-08-26 05:15:22

圖片編輯器 H5-DooringMitu-Doorin

2023-08-02 07:25:52

在線圖片編輯器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 超碰免费在线观看 | 国产精品久久在线观看 | 欧美性生活免费 | 欧美激情在线一区二区三区 | 亚洲美女在线视频 | 中文字幕亚洲欧美 | 91在线一区| 91激情电影| 日韩资源 | 欧美精品一区在线 | 亚洲一区二区精品 | 农村真人裸体丰满少妇毛片 | a级毛片基地| 欧美福利一区 | 欧美日韩中文字幕在线播放 | 在线观看免费高清av | chengrenzaixian| 国产一区二区三区久久久久久久久 | 91九色麻豆 | 精品一区二区三区免费视频 | 国产精品一区在线 | 午夜影院在线播放 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲色欲色欲www | 成人免费视频在线观看 | 精品久 | 亚洲www啪成人一区二区麻豆 | 亚洲成人国产精品 | 91精品国产777在线观看 | 免费久| 欧美精品欧美精品系列 | 午夜专区 | 亚洲最大的成人网 | 午夜寂寞影院在线观看 | 国产精品国产三级国产aⅴ原创 | 中文字幕在线观看一区二区 | 香蕉久久久| 成人免费视频网站在线观看 | 天天影视色综合 | 亚洲综合色网 | 亚洲一级二级三级 |