在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony上實(shí)現(xiàn)圖片編輯功能

OpenHarmony技術(shù)社區(qū) ? 來源:OST開源開發(fā)者 ? 2023-06-25 15:17 ? 次閱讀

圖片編輯是在應(yīng)用中經(jīng)常用到的功能,比如相機(jī)拍完照片后可以對(duì)照片進(jìn)行編輯;截圖后可以對(duì)截圖進(jìn)行編輯;可以對(duì)圖庫中的圖片進(jìn)行編輯等。

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

效果呈現(xiàn)

本例最終效果如下:

wKgaomSX6jWAbYTgAAQDAgWkqGY571.gif

運(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)

實(shí)現(xiàn)思路

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

①對(duì)圖片解碼,獲取到 pixelMap

先通過上下文 context 獲取到資源管理器 resourceManager,然后通過資源管理器獲取到圖片數(shù)據(jù),再獲取圖片的 ArrayBuffer。

最后通過 ArrayBuffer 創(chuàng)建 imageSource,獲取到 pixelMap,完成圖片解碼。

②編輯 pixelMap

獲取到 pixelMap 后就可以針對(duì) pixelMap 進(jìn)行裁剪、縮放、偏移、旋轉(zhuǎn)、翻轉(zhuǎn)、調(diào)節(jié)透明度等操作。

③將編輯好的 pixelMap 渲染顯示出來

完成對(duì) pixelMap 的編輯后,可以通過 Image 組件將編輯后的 pixelMap 渲染顯示出來。

開發(fā)步驟

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

①對(duì)圖片進(jìn)行解碼

先通過上下文 context 獲取到資源管理器 resourceManager,然后通過資源管理器獲取到圖片數(shù)據(jù),再獲取圖片的 ArrayBuffer。

最后通過 ArrayBuffer 創(chuàng)建 imageSource,獲取到 pixelMap,完成圖片解碼。

具體代碼如下:

asyncget_pixelmap(){
//獲取resourceManager資源管理
constcontext=getContext(this)
constresourceMgr=context.resourceManager
//獲取rawfile文件夾下httpimage.PNG的ArrayBuffer
constfileData=awaitresourceMgr.getMediaContent($r('app.media.httpimage'))
constbuffer=fileData.buffer
//創(chuàng)建imageSource
constimageSource=image.createImageSource(buffer)
//創(chuàng)建PixelMap
constpixelMap=awaitimageSource.createPixelMap()
returnpixelMap
}
②編輯 pixelMap

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

具體代碼如下:

//對(duì)pixelMap進(jìn)行裁剪
asynccrop_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.crop({x:0,y:0,size:{height:300,width:300}})
this.imagePixelMap=pixelMap
}
//對(duì)pixelMap進(jìn)行縮放
asyncscale_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.scale(0.5,0.5)
this.imagePixelMap=pixelMap
}
//對(duì)pixelMap進(jìn)行偏移
asynctranslate_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.translate(100,100);
this.imagePixelMap=pixelMap
}
//對(duì)pixelMap進(jìn)行旋轉(zhuǎn)
asyncrotate_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.rotate(90);
this.imagePixelMap=pixelMap
}
//對(duì)pixelMap進(jìn)行翻轉(zhuǎn)
asyncflip_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.flip(false,true);
this.imagePixelMap=pixelMap
}
//對(duì)pixelMap進(jìn)行透明度調(diào)整
asyncopacity_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.opacity(0.5);
this.imagePixelMap=pixelMap
}
③通過 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')
}

完整代碼

本例完整代碼如下:

importimagefrom'@ohos.multimedia.image';

@Entry
@Component
structImageEdit{
@StateimagePixelMap:PixelMap=undefined
@Stateedit:boolean=false

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

asyncget_pixelmap(){
//獲取resourceManager資源管理
constcontext=getContext(this)
constresourceMgr=context.resourceManager
//獲取rawfile文件夾下httpimage.PNG的ArrayBuffer
constfileData=awaitresourceMgr.getMediaContent($r('app.media.httpimage'))
constbuffer=fileData.buffer
//創(chuàng)建imageSource
constimageSource=image.createImageSource(buffer)
//創(chuàng)建PixelMap
constpixelMap=awaitimageSource.createPixelMap()
returnpixelMap
}

//對(duì)pixelMap進(jìn)行裁剪
asynccrop_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.crop({x:0,y:0,size:{height:300,width:300}})
this.imagePixelMap=pixelMap
}

//對(duì)pixelMap進(jìn)行縮放
asyncscale_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.scale(0.5,0.5)
this.imagePixelMap=pixelMap
}

//對(duì)pixelMap進(jìn)行偏移
asynctranslate_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.translate(100,100);
this.imagePixelMap=pixelMap
}

//對(duì)pixelMap進(jìn)行旋轉(zhuǎn)
asyncrotate_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.rotate(90);
this.imagePixelMap=pixelMap
}

//對(duì)pixelMap進(jìn)行翻轉(zhuǎn)
asyncflip_image(){
letpixelMap=awaitthis.get_pixelmap()
pixelMap.flip(false,true);
this.imagePixelMap=pixelMap
}

//對(duì)pixelMap進(jìn)行透明度調(diào)整
asyncopacity_image(){
letpixelMap=awaitthis.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%')
}
}

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 相機(jī)
    +關(guān)注

    關(guān)注

    4

    文章

    1351

    瀏覽量

    53612
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68612
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1036

    瀏覽量

    45942
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16317

原文標(biāo)題:OpenHarmony上實(shí)現(xiàn)“圖片編輯”功能

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開發(fā)案例:【圖片編輯

    基于canvas組件、圖片編解碼,介紹了圖片編輯實(shí)現(xiàn)過程。
    的頭像 發(fā)表于 04-22 16:42 ?915次閱讀
    HarmonyOS開發(fā)案例:【<b class='flag-5'>圖片</b><b class='flag-5'>編輯</b>】

    ad9編輯原理圖出現(xiàn)圖片的錯(cuò)誤

    ad9編輯原理圖出現(xiàn)圖片的錯(cuò)誤哪位大神指點(diǎn)
    發(fā)表于 05-03 18:40

    HarmonyOS教程—基于圖片處理能力,實(shí)現(xiàn)一個(gè)圖片編輯模板

    1. 介紹在日常生活中有很多APP都有圖片編輯功能,但由于APP間存在一定的功能差異,開發(fā)者往往要為每個(gè)APP單獨(dú)實(shí)現(xiàn)一套
    發(fā)表于 08-31 10:13

    OpenHarmony 3.0 LTS 新增特性功能

    本帖最后由 soon順soon 于 2021-10-7 21:36 編輯 期待已久的輕量級(jí)分布式要來了?https://gitee.com/openharmony/docs/blob
    發(fā)表于 09-30 08:24

    為什么要在OpenHarmony設(shè)備安裝Dropbear呢

    個(gè)ssh服務(wù)器的實(shí)現(xiàn)軟件,同時(shí)具有ssh客戶端的功能。dropbear通常在嵌入式Linux運(yùn)行,例如大名鼎鼎的OpenWRT默認(rèn)的ssh的服務(wù)器和客戶端正是dropbear。為什么需要
    發(fā)表于 05-23 17:45

    尼康推出全新視頻和圖片瀏覽編輯軟件

    今日,尼康公司宣布推出全新視頻和圖片瀏覽編輯軟件——NX Studio(1.0版),該軟件能夠實(shí)現(xiàn)無縫瀏覽、處理和編輯用尼康數(shù)碼相機(jī)拍攝的照片和視頻的新軟件,并且從今日起可免費(fèi)下載。
    的頭像 發(fā)表于 03-05 09:37 ?3153次閱讀

    OpenHarmony分論壇-OpenHarmony生態(tài)發(fā)展參考

    今天的華為開發(fā)者大會(huì)2021,OpenHarmony分論壇展示了OpenHarmony生態(tài)發(fā)展參考。 HDC分論壇-OpenHarmony
    的頭像 發(fā)表于 10-23 16:11 ?1683次閱讀
    <b class='flag-5'>OpenHarmony</b>分論壇-<b class='flag-5'>OpenHarmony</b>生態(tài)發(fā)展參考

    OpenHarmony Dev-Board-SIG專場(chǎng):代碼Master所需材料

    OpenHarmony Dev-Board-SIG專場(chǎng):代碼Master所需材料 審核編輯:金巧
    的頭像 發(fā)表于 12-28 14:27 ?1098次閱讀
    <b class='flag-5'>OpenHarmony</b> Dev-Board-SIG專場(chǎng):代碼<b class='flag-5'>上</b>Master所需材料

    基于openharmony Span實(shí)現(xiàn)富文本多種樣式編輯

    項(xiàng)目介紹 項(xiàng)目名稱:Ohos-Rich-text-Editor 所屬系列:openharmony的第三方組件適配移植 功能:Span實(shí)現(xiàn)富文本多種樣式的編輯 項(xiàng)目移植狀態(tài):主
    發(fā)表于 03-21 09:26 ?1次下載

    基于openharmony適配移植的圖片加載器

    項(xiàng)目介紹 項(xiàng)目名稱:Sketch 所屬系列:openharmony的第三方組件適配移植 功能:一款強(qiáng)大且全面的圖片加載器,除了圖片加載的必備功能
    發(fā)表于 03-22 14:41 ?3次下載

    如何在OpenHarmony開源代碼基礎(chǔ)實(shí)現(xiàn)數(shù)字管家開發(fā)宿舍全屋智能

    基于OpenAtom OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)、數(shù)字管家開發(fā)宿舍全屋智能,實(shí)現(xiàn)碰一碰開門、碰一碰開燈、碰一碰開風(fēng)扇以及煙感檢測(cè)。因?yàn)楦黜?xiàng)目開發(fā)流程大體相似,本文主要以碰一碰開門為例介紹如何在現(xiàn)
    的頭像 發(fā)表于 08-26 09:55 ?1838次閱讀

    OpenHarmony PhotoView組件的介紹

    PhotoView是OpenAtom OpenHarmony(簡(jiǎn)稱“OpenHarmony”)系統(tǒng)的一款圖片縮放及瀏覽的三方組件,用于聲明式應(yīng)用開發(fā),支持圖片縮放、平移、旋轉(zhuǎn)等
    的頭像 發(fā)表于 09-09 10:04 ?1163次閱讀

    HarmonyOS開發(fā)實(shí)例:【圖片編輯應(yīng)用】

    通過動(dòng)態(tài)設(shè)置元素樣式的方式,實(shí)現(xiàn)幾種常見的圖片操作,包括裁剪、旋轉(zhuǎn)、縮放和鏡像。
    的頭像 發(fā)表于 04-23 09:42 ?451次閱讀
    HarmonyOS開發(fā)實(shí)例:【<b class='flag-5'>圖片</b><b class='flag-5'>編輯</b>應(yīng)用】

    HarmonyOS開發(fā)案例:【圖片編輯

    基于ArkTS的聲明式開發(fā)范式的樣例,主要介紹了圖片編輯實(shí)現(xiàn)過程。
    的頭像 發(fā)表于 04-23 20:54 ?392次閱讀
    HarmonyOS開發(fā)案例:【<b class='flag-5'>圖片</b><b class='flag-5'>編輯</b>】

    基于ArkTS語言的OpenHarmony APP應(yīng)用開發(fā):圖片處理

    (),rotate()接口實(shí)現(xiàn)對(duì)圖片的縮放,裁剪,旋轉(zhuǎn)功能。案例說明:發(fā)表評(píng)價(jià)頁面點(diǎn)擊添加圖片/照片,頁面跳轉(zhuǎn)到圖片選擇頁面。進(jìn)入
    的頭像 發(fā)表于 09-20 08:07 ?559次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應(yīng)用開發(fā):<b class='flag-5'>圖片</b>處理
    主站蜘蛛池模板: 俄罗斯小屁孩cao大人免费| 中文字幕在线看视频一区二区三区| 91av免费| 四虎影院免费在线播放| 国模大尺度在线| 久久久福利| 在线成人亚洲| 国产一区精品视频| 狠狠干福利视频| 伊人久久大线蕉香港三级| 欧美xxxx日本| 午夜精品福利在线观看| 国产裸体美女视频全黄| 操日韩| 亚洲男同tv| 俺去在线| 一区二区三区网站在线免费线观看| 四虎a456tncom| 亚洲精品福利视频| 丝袜美腿一区| 久久婷婷久久一区二区三区| 激情综合激情五月| 亚洲 欧洲 日韩| 78摸在线| 日本不卡一区视频| 精品手机在线| 2019天天干| 综合色区| 高清成人| 一区二区高清在线观看| 男人的天堂在线精品视频| 久久新视频| 四虎影视院| 天天干天天干天天操| 曰本女人色黄网站| 456主播喷水在线观看| 亚洲网站一区| 黄 色 片成 人免费观看| 啪一啪日一日| 欧美a性| 91福利国产在线观看网站|