• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15import image from '@ohos.multimedia.image'
16import photoAccessHelper from '@ohos.file.photoAccessHelper';
17import Logger from './Logger'
18import PictureItem from '../model/PictureItem'
19import { Context } from '@ohos.abilityAccessCtrl';
20import dataSharePredicates from '@ohos.data.dataSharePredicates';
21import userFileManager from '@ohos.filemanagement.userFileManager';
22
23const TAG = '[ImageModel]'
24const SPLIT_COUNT: number = 3 // 图片横竖切割的份数
25
26export default class ImageModel {
27  private phAccessHelper: photoAccessHelper.PhotoAccessHelper;
28
29  constructor(context: Context) {
30    this.phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
31  }
32
33  async getAllImg() {
34    let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
35    let fetchOptions: userFileManager.FetchOptions = {
36      fetchColumns: [],
37      predicates: predicates.equalTo(userFileManager.ImageVideoKey.FILE_TYPE.toString(), userFileManager.FileType.IMAGE.toString())
38    };
39    let mediaList: photoAccessHelper.PhotoAsset[] = [];
40    const fetchResult = await this.phAccessHelper.getAssets(fetchOptions);
41    if (fetchResult.getCount() > 0) {
42      mediaList = await fetchResult.getAllObjects();
43      Logger.info(TAG, 'fetchResult success' + JSON.stringify(mediaList));
44    }
45    return mediaList;
46  }
47
48  async splitPic(index: number) {
49    let imagePixelMap: PictureItem[] = []
50    let imgDatas: photoAccessHelper.PhotoAsset[] = await this.getAllImg();
51    let imagePackerApi = image.createImagePacker()
52    let fd = await imgDatas[index].open('r')
53    let imageSource = image.createImageSource(fd)
54    let imageInfo = await imageSource.getImageInfo()
55    Logger.info(TAG, `sizeImg createImageSource ${JSON.stringify(imageSource)}`)
56    let height = imageInfo.size.height / SPLIT_COUNT
57    for (let i = 0; i < SPLIT_COUNT; i++) {
58      for (let j = 0; j < SPLIT_COUNT; j++) {
59        let picItem: PictureItem | PixelMap | undefined = undefined;
60        if (i === SPLIT_COUNT - 1 && j === SPLIT_COUNT - 1) {
61          picItem = new PictureItem(9, undefined)
62          imagePixelMap.push(picItem)
63        } else {
64          Logger.info(TAG, `sizeImg x = ${imageInfo.size.width / SPLIT_COUNT} y = ${height}`)
65          let decodingOptions: image.DecodingOptions = {
66            desiredRegion: {
67              size: {
68                height: height, width: imageInfo.size.width / SPLIT_COUNT
69              }, x: j * imageInfo.size.width / SPLIT_COUNT, y: i * height
70            }
71          }
72          picItem = await imageSource.createPixelMap(decodingOptions)
73          imagePixelMap.push({
74            index: i * SPLIT_COUNT + j, pixelMap: picItem
75          })
76        }
77      }
78    }
79    imagePackerApi.release()
80    await imgDatas[index].close(fd)
81    return imagePixelMap
82  }
83}