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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于ArkTS語言的OpenHarmony APP應用開發:圖片處理

福州市凌睿智捷電子有限公司 ? 2024-09-20 08:07 ? 次閱讀

1、程序介紹

本案例使用TextArea實現多文本輸入,使用mediaLibrary實現在相冊中獲取圖片,使用image生成pixelMap,使用pixelMap的scale(),crop(),rotate()接口實現對圖片的縮放,裁剪,旋轉功能。

案例說明:

發表評價頁面點擊添加圖片/照片,頁面跳轉到圖片選擇頁面。

進入圖片選擇頁面后,選擇需要顯示的圖片,最多選擇6張圖片。

選中圖片后點擊下一步,頁面會跳轉到圖片編輯頁面,點擊縮放,頁面會顯示縮小,放大按鈕,點擊按鈕,可對圖片進行縮小,放大操作。點擊裁剪,頁面會跳出裁剪比例,點擊想要裁剪的比例可以對圖片進行裁剪。點擊旋轉可對圖片進行旋轉。

圖片編輯完成后,點擊確認,頁面會跳轉到發表評價頁面,顯示相關照片。點擊添加圖片/照片可以對圖片進行重新選擇。

點擊返回按鈕,退出應用。

API接口:9

2、知識準備

2.1、TextArea

多行文本輸入框組件,當輸入的文本內容超過組件寬度時會自動換行顯示。

function TextArea(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextAreaController})

其中,參數定義如下:

參數名參數類型必填參數描述
placeholderResourceStr設置無輸入時的提示文本
textResourceStr設置輸入框當前的文本內容
controllerTextAreaController設置TextArea控制器

其中,屬性可支持如下:

名稱參數類型描述
placeholderColorResourceColor設置placeholder文本顏色
placeholderFontFont設置plaoceholder文本樣式
textAlignTextAlign設置文本在輸入框中的水平對齊式默認值:TextAlign.Start
caretColorResourceColor設置輸入框光標顏色
inputFilter{value: ResourceStr,error?: (value: string) => void}通過正則表達式設置輸入過濾器。匹配表達式的輸入允許顯示,不匹配的輸入將被過濾。僅支持單個字符匹配,不支持字符串匹配。- value:設置正則表達式。- error:正則匹配失敗時,返回被過濾的內容。
copyOptionCopyOptions設置輸入的文本是否可復制。設置CopyOptions.None時,當前TextArea中的文字無法被復制或剪切,僅支持粘貼。

2.2、mediaquery

ohos.mediaquery提供媒體查詢,提供根據不同媒體類型定義不同的樣式。

2.2.1、導入模塊

import mediaquery from '@ohos.mediaquery'

2.2.2、 mediaquery.matchMediaSync

function matchMediaSync(condition: string): MediaQueryListener

設置媒體查詢的查詢條件,并返回對應的監聽句柄。

參數定義如下所示:

參數名類型必填說明
conditionstring媒體事件的匹配事件

返回值定義如下所示:

類型說明
MediaQueryListener媒體事件監聽句柄,用于注冊和銷毀監聽回調

2.2.3、MediaQueryListener

媒體查詢的句柄,并包含了申請句柄時的首次查詢結果。

系統能力:SystemCapability.ArkUI.ArkUI.Full

(1)屬性

名稱類型可讀可寫說明
matchesboolean是否符合匹配條件
mediastring媒體事件的匹配條件

(2)on函數

function on(type: 'change', callback: Callback<MediaQueryResult>): void

通過句柄向對應的查詢條件注冊回調,當媒體屬性發生變更時會觸發該回調。

系統能力:SystemCapability.ArkUI.ArkUI.Full

參數:

參數名類型必填說明
typestring必須填寫字符串change
callbackCallback向媒體查詢注冊的回調

(3)off函數

function off(type: 'change', callback?: Callback<MediaQueryResult>): void

通過句柄向對應的查詢條件去注冊回調,當媒體屬性發生變更時不在觸發指定的回調。

系統能力:SystemCapability.ArkUI.ArkUI.Full

參數:

參數名類型必填說明
typestring必須填寫字符串change
callbackCallback需要去注冊的回調,如果參數缺省則去注冊該句柄下所有的回調

2.2.4、MediaQueryResult

用于執行媒體查詢操作。

系統能力:SystemCapability.ArkUI.ArkUI.Full

(1)屬性

名稱類型可讀可寫說明
matchesboolean是否符合匹配條件
mediastring媒體事件的匹配條件

2.3、mediaLibrary

MediaLibrary支持能力列舉如下:

查詢音頻視頻和圖片文件元數據信息

查詢圖片和視頻相冊

媒體文件操作如創建、重命名、拷貝和刪除

相冊操作如創建、重命名和刪除

MediaLibrary整體框架,如下所示:

5c82cab4-76e4-11ef-bb4b-92fbcf53809c.jpg

詳細請參考:官方文檔

2.4、Grid

網格容器,由“行”和“列”分割的單元格所組成,通過指定“項目”所在的單元格做出各種各樣的布局。

詳細請參考:官方文檔

2.5、@ohos.multimedia.image

本模塊提供圖片處理效果,包括通過屬性創建PixelMap、讀取圖像像素數據、讀取區域內的圖片數據等。

詳細請參考:官方文檔

2.6、@ohos.router

本模塊提供通過不同的url訪問不同的頁面,包括跳轉到應用內的指定頁面、用應用內的某個頁面替換當前頁面、返回上一頁面或指定的頁面等。

詳細請參考:官方文檔

3、程序解析

3.1、申請設備權限

配置文件module.json5中聲明權限,申請應用讀取、寫入用戶外部存儲中的媒體文件信息以及允許應用訪問用戶媒體文件中的地理位置信息。

"requestPermissions": [ { "name": "ohos.permission.READ_MEDIA", "reason": "$string:media_read_permission", "usedScene": { "abilities": [ "MainAbility" ], "when": "inuse" } }, { "name": "ohos.permission.WRITE_MEDIA", "reason": "$string:media_write_permission", "usedScene": { "abilities": [ "MainAbility" ], "when": "inuse" } }, { "name": "ohos.permission.MEDIA_LOCATION", "reason": "$string:media_location_permission", "usedScene": { "abilities": [ "MainAbility" ], "when": "inuse" } }]

3.2、Index.ets

首先,聲明1個pixelMaps數組,用于存放照片或視頻。

@StorageLink('pixelMaps') pixelMaps: Array<image.PixelMap> = []

注意:@StorageLink('pixelMaps')表明通過使用@StorageLink(key)裝飾的狀態變量,與AppStorage建立雙向數據綁定。

其次,在build()調用之前運行aboutToAppear(),負責獲取AppStorage的pixelMaps屬性,然后往當前頁傳入isShowCamera參數。

aboutToAppear() {
logger.info(TAG, 'enter aboutToAppear')
// 與AppStorage建立雙向數據綁定,獲取pixelMaps屬性
if (AppStorage.Get('pixelMaps')) {
this.pixelMaps.push(undefined)
}
// 獲取發起跳轉的頁面往當前頁傳入的參數
if (router.getParams() && router.getParams()['isShowCamera']) {
this.isShowCamera = true
}
}

最后,build()顯示整個頁面。

其中,已選圖片通過Grid和GridItem控件排列顯示。

// 使用網格容器將已選照片顯示出現
Grid() {
// 輪流顯示成1行照片
ForEach(this.pixelMaps, (item, index) => {
GridItem() {
if (index < this.pixelMaps.length - 1) {
Image(item)
.width('100%')
.height(100)
.borderRadius(10)

} else {
// 最后一個為"添加圖片/照片"
Column() {
Image($r('app.media.photo'))
.height(40)
.width(40)
.onClick(() => {
router.push({
url: 'pages/ChoicePhotos'
})
})
Text($r('app.string.add_picture'))
.fontSize(13)
}
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
.width('100%')
.height(100)
.borderRadius(10)
.backgroundColor('#F1F3F5')
}
}
})
}
.columnsTemplate('1fr 1fr 1fr 1fr')
.columnsGap(8)
.rowsGap(8)
.margin({ top: 8 })
.width('94%')
.height(105 * (this.pixelMaps.length > 4 ? 2 : 1))

3.3、ChoicePhotos.ets

該頁面為選擇照片頁面。該頁面通過調用ChoicePhoto()顯示頁面。

@Entry @Component struct ChoicePhotos {
build() {
Column() {
ChoicePhoto()
}
}
}

ChoicePhoto()主要負責顯示照片視頻以及添加等功能的界面。

首先,聲明1個MediaLibrary類對象和監聽句柄listener,用于查詢音頻、視頻和圖片文件元數據信息。

private mediaLibraryInstance: mediaLibrary.MediaLibrary = mediaLibrary.getMediaLibrary(getContext(this) as any)
private listener = mediaQuery.matchMediaSync('screen and (min-aspect-ratio: 1.5) or (orientation: landscape)')

其次,調用build()之前做初始化工作,主要是開啟監聽句柄listener的change事件,并獲取設備端保存的圖片資源。

async aboutToAppear() { logger.info(TAG, `aboutToAppear`) this.listener.on('change', this.onLand) this.nextText = await this.convertResourceToString($r('app.string.next')) // 獲取圖片的文件信息 this.getFileAssetsFromType(mediaLibrary.MediaType.IMAGE)}

其中,getFileAssetsFromType()獲取設備端所有的圖片或視頻的文件信息。

async getFileAssetsFromType(mediaType: mediaLibrary.MediaType) { logger.info(TAG, `getFileAssetsFromType`) let context = getContext(this) as any // 獲取媒體庫的實例,用于訪問和修改用戶等個人媒體數據信息(如音頻、視頻、圖片、文檔等) let mediaLibraryInstance = mediaLibrary.getMediaLibrary(context) if (!mediaLibraryInstance) { return } logger.info(TAG, `mediaLibraryInstance = ${JSON.stringify(mediaLibraryInstance)}`) // 創建文件獲取選項,此處參數為獲取image類型的文件資源 let fileKeyObj = mediaLibrary.FileKey let fetchOp = { selections: `${fileKeyObj.MEDIA_TYPE}=?`, selectionArgs: [`${mediaType}`], } // 獲取文件資源 let fetchFileResult = await mediaLibraryInstance.getFileAssets(fetchOp) logger.info(TAG, `fetchFileResult = ${JSON.stringify(fetchFileResult)} , ${fetchFileResult.getCount()}`) if (fetchFileResult && fetchFileResult.getCount() > 0) { this.medias = await fetchFileResult.getAllObject() } logger.info(TAG, `this.medias = ${JSON.stringify(this.medias)}`)}

再次,使用Grid和GridItem控件顯示圖片或視頻。

Grid() { ForEach(this.medias, (item, index) => { GridItem() { Stack({ alignContent: Alignment.TopEnd }) { Image(item.uri) .width('100%') .height('100%') .borderRadius(10) .objectFit(ImageFit.Fill)
if (this.isShowChoices[index]) { this.showChoiceBuild('#e92f4f', this.choiceMedias.indexOf(item) + 1) } else { this.showChoiceBuild('#ffb7b4b4', 0) } } .width('100%') .height('100%') .onClick(() => { this.isShowChoices[index] = !this.isShowChoices[index] if (this.isShowChoices[index]) { if (this.choiceMedias.length > 5) { prompt.showDialog({ message: $r('app.string.choice_number') }) this.isShowChoices[index] = !this.isShowChoices[index] return } this.choiceMedias.push(item) } else { if (this.choiceMedias.indexOf(item) != -1) { this.choiceMedias.splice(this.choiceMedias.indexOf(item), 1) } } }) } .aspectRatio(1) })}

最后,定義1個按鍵事件。一旦選中某個圖片,可進入圖片編輯頁面。

Button(`${this.nextText} ${this.isChoice === true ? `(${this.choiceMedias.length})` : ''}`) .fontSize(20) .height(32) .backgroundColor(this.isChoice === true ? '#E92F4F' : '#fffa8e8e') .margin({ right: 10 }) .borderRadius(20) .onClick(() => { if (this.isChoice === false) { return } this.mediaUris = this.choiceMedias.map((item) => { return item.uri }) // 跳轉到圖片編輯頁面 router.push({ url: 'pages/EditPages', params: { mediaUris: this.mediaUris, isLand: this.isLand } }) })

4、項目編譯

4.1、打開項目

打開DevEco Studio,再打開自定義通知項目。

4.2、編譯程序

點擊菜單欄上的“Build” -> "Rebuild Project"。如果出現無法編譯,則注意查看Event Log界面。如下所示:

5c9d0b4a-76e4-11ef-bb4b-92fbcf53809c.png

點擊Run 'npm install',讓DevEco Studio安裝相關依賴包。

重新點擊菜單欄上的“Build” -> "Rebuild Project"。出現如下錯誤:

5cbf574a-76e4-11ef-bb4b-92fbcf53809c.png

點擊上圖紅色框部分,安裝相關服務。

重新點擊菜單欄上的“Build” -> "Rebuild Project",編譯成功。

5cd94dbc-76e4-11ef-bb4b-92fbcf53809c.png

4.3、安裝程序

點擊“entry”按鈕,將項目程序安裝到設備端。如下圖所示:

5d07311e-76e4-11ef-bb4b-92fbcf53809c.png

如果出現下述報錯,表示無法安裝。如圖所示:

5d18f1c4-76e4-11ef-bb4b-92fbcf53809c.png

點擊上圖紅色框的藍色字體,彈出"Project Structure"對話框,點擊"Apply",再點擊"OK"。如圖所示:

5d3038de-76e4-11ef-bb4b-92fbcf53809c.png

重新點擊“entry”按鈕,將項目程序安裝到設備端。

5d5b3f48-76e4-11ef-bb4b-92fbcf53809c.png

5、運行結果

5d61db5a-76e4-11ef-bb4b-92fbcf53809c.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • APP
    APP
    +關注

    關注

    33

    文章

    1575

    瀏覽量

    72606
  • 應用開發
    +關注

    關注

    0

    文章

    59

    瀏覽量

    9396
  • OpenHarmony
    +關注

    關注

    25

    文章

    3730

    瀏覽量

    16424
收藏 人收藏

    評論

    相關推薦

    基于ArkTS語言OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介 該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。 本案例是基于API 9接口開發。 本案例已在OpenHarmony凌蒙派-
    發表于 09-14 12:47

    基于ArkTS語言OpenHarmony APP應用開發:簡易計數器

    例是基于API 9接口開發。 本案例已在OpenHarmony凌蒙派-RK3568開發板驗證通過,具體代碼可參考:https://gitee.com/Lockzhiner-Electronics
    發表于 09-14 13:38

    基于ArkTS語言OpenHarmony APP應用開發圖片顯示器

    1、程序簡介 該程序是基于OpenHarmony標準系統編寫的UI應用類:簡易圖片顯示器。 該程序設計5個按鈕和圖片框。當每次按下不同的按鈕,則圖片框顯示框顯示
    發表于 09-14 14:22

    基于ArkTS語言OpenHarmony APP應用開發:自定義通知

    OpenHarmony凌蒙派-RK3568開發板驗證通過,具體代碼可參考:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk3568-openharmony
    發表于 09-14 15:12

    基于ArkTS語言OpenHarmony APP應用開發圖片處理

    圖片編輯完成后,點擊確認,頁面會跳轉到發表評價頁面,顯示相關照片。點擊添加圖片/照片可以對圖片進行重新選擇。 點擊返回按鈕,退出應用。 本案例已在OpenHarmony凌蒙派-RK
    發表于 09-19 14:23

    HUAWEI DevEco Studio 3.1版本發布,配套ArkTS聲明式開發全面升級

    構建產物。 3)新增支持ArkTS/JS與C/C++跨語言調試特性,在C/C++工程中,采用ArkTS/JS與C/C++進行混合開發,能夠在ArkT
    發表于 11-17 11:52

    HarmonyOS/OpenHarmony應用開發-Stage模型ArkTS語言AbilityConstant

    狀態。APP_RECOVERY1應用恢復保存狀態。接口示例:*附件:HarmonyOSOpenHarmony應用開發-stage模型ArkTS語言
    發表于 04-03 09:15

    HarmonyOS/OpenHarmony應用開發-Stage模型ArkTS語言AbilityStage

    進行初始化時回調。context接口示例:*附件:HarmonyOSOpenHarmony應用開發-stage模型ArkTS語言AbilityStage.docx
    發表于 04-07 15:16

    HarmonyOS/OpenHarmony應用開發-Stage模型ArkTS語言擴展能力基類

    \'@ohos.app.ability.ExtensionAbility\'; 接口示例: *附件:HarmonyOSOpenHarmony應用開發-stage模型ArkTS
    發表于 04-26 10:00

    HarmonyOS/OpenHarmony應用開發-ArkTS語言基本語法說明

    的封裝和復用UI描述。 @Extend/@Style:擴展內置組件和封裝屬性樣式,更靈活地組合內置組件。 stateStyles:多態樣式,可以依據組件的內部狀態的不同,設置不同樣式。*附件:HarmonyOSOpenHarmony應用開發-
    發表于 06-01 10:25

    HarmonyOS/OpenHarmony應用開發-ArkTS語言聲明式UI描述

    (100) . Button(\'click +1\') ..onClick(() => { .console.info(\'+1 clicked!\'); .}) .} .} *附件:HarmonyOSOpenHarmony應用開發-
    發表于 06-05 15:26

    HarmonyOS優選主力應用開發語言-ArkTS概述

    ArkTS是HarmonyOS優選的主力應用開發語言ArkTS圍繞應用開發在TypeScript(簡稱TS)生態基礎上做了進一步擴展,繼承
    發表于 06-09 10:52

    OpenHarmony ArkTS工程目錄結構(Stage模型)

    一、應用工程結構 圖片來源:OpenHarmony官網 AppScope > app.json5:應用的全局配置信息。 entry:OpenHarmony工程模塊,編譯構建生成一
    發表于 09-18 15:23

    OpenHarmony 應用開發SDK、API 與基礎工具

    一、整體說明 ArkTS 語言是鴻蒙系統主推的應用開發語言。因此鴻蒙系統提供給開發者的 API 絕大部分也是
    發表于 09-19 15:45

    基于ArkTS語言OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發。本案例已在OpenHarmony凌蒙派-RK35
    的頭像 發表于 09-15 08:09 ?432次閱讀
    基于<b class='flag-5'>ArkTS</b><b class='flag-5'>語言</b>的<b class='flag-5'>OpenHarmony</b> <b class='flag-5'>APP</b>應用<b class='flag-5'>開發</b>:Hello<b class='flag-5'>Openharmony</b>
    主站蜘蛛池模板: 日本h视频在线| 久久青草国产精品一区| 一级特级片| 丁香婷婷在线观看| 激情五月五月婷婷| 爱爱免费网站| 午夜影视体验区| 手机看片三级| 国产国拍亚洲精品mv在线观看| 2020年亚洲天天爽天天噜| 国产成人啪午夜精品网站| 免费看色视频| 天堂资源吧| 福利三区| 亚洲欧美7777| 日本一区三区二区三区四区| 免费黄色毛片| 日本午夜视频| 毛片毛多| 91tm视频| 新版天堂资源在线官网8| 天天做天天爱夜夜想毛片| 久久精品国产福利| av72成人| 亚洲va国产va天堂va久久| 欧美日本一区二区三区| www一级毛片| 欧美一级在线全免费| 国产gav成人免费播放视频| 7086bt伙计 福利一区| a黄色网| 天堂电影在线| 久久黄网站| 午夜福利国产一级毛片| 操操片| 长腿丝袜美女被啪啪| 日本a级片视频| 18视频免费网址在线观看| 关晓彤被调教出奶水的视频| 国产高清精品自在久久| 欧美18同性gay视频|