diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index a799b6a..fdde674 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -17,8 +17,6 @@ import router from '@system.router'; @Entry @Component struct Index { - - aboutToAppear(): void { } @@ -26,73 +24,78 @@ struct Index { build() { Column() { - Button("单个图片使用").onClick(()=>{ + Button("单个图片使用").onClick(() => { router.push({ uri: 'pages/SingleImage', }); }) - Button("多图 + LazyForEach").margin({top:10}).onClick(()=>{ + Button("下采样").margin({ top: 10 }).onClick(() => { + router.push({ + uri: "pages/DownSamplePage", + }); + }) + Button("多图 + LazyForEach").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/ManyPhotoShowPage', }); }) - Button("多图 + reuse + LazyForeach").margin({top:10}).onClick(()=>{ + Button("多图 + reuse + LazyForeach").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/UserPage', }); }) - Button("长图显示").margin({top:10}).onClick(()=>{ + Button("长图显示").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/LongImagePage', }); }) - Button("缩放图片").margin({top:10}).onClick(()=>{ + Button("缩放图片").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/TransformPage', }); }) - Button("消息+List").margin({top:10}).onClick(()=>{ + Button("消息+List").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/TestImageFlash', }); }) - Button("自定义缓存key").margin({top:10}).onClick(()=>{ + Button("自定义缓存key").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/SignatureTestPage', }); }) - Button("预加载图片到文件缓存").margin({top:10}).onClick(()=>{ + Button("预加载图片到文件缓存").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/TestPrefetchToFileCache', }); }) - Button("从缓存获取图片显示").margin({top:10}).onClick(()=>{ + Button("从缓存获取图片显示").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/TestIsUrlExist', }); }) - Button("测试单个请求头").margin({top:10}).onClick(()=>{ + Button("测试单个请求头").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/TestHeader', }); }) - Button("测试写入缓存策略").margin({top:10}).onClick(()=>{ + Button("测试写入缓存策略").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/TestWriteCacheStage', }); }) - Button("图片变换").margin({top:10}).onClick(()=>{ + Button("图片变换").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/ImageTransformation', @@ -100,7 +103,7 @@ struct Index { }) - Button("不同的ObjectFit").margin({top:10}).onClick(()=>{ + Button("不同的ObjectFit").margin({ top: 10 }).onClick(() => { router.push({ uri: 'pages/ObjectFitPage', diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index 4d74d0d..77461fa 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -14,8 +14,9 @@ "pages/TestHeader", "pages/ImageTransformation", "pages/ObjectFitPage", - "pages/TestWriteCacheStage", "pages/LoadStatePage", - "pages/TestRemoveCache" + "pages/TestRemoveCache", + "pages/TestWriteCacheStage", + "pages/DownSamplePage" ] } \ No newline at end of file diff --git a/hvigor/hvigor-config.json5 b/hvigor/hvigor-config.json5 index 8c56bf6..14977ad 100644 --- a/hvigor/hvigor-config.json5 +++ b/hvigor/hvigor-config.json5 @@ -1,6 +1,7 @@ { "modelVersion": "5.0.0", "dependencies": { + "@ohos/hvigor-ohos-plugin": "4.1.2" }, "execution": { // "analyze": "default", /* Define the build analyze mode. Value: [ "default" | "verbose" | false ]. Default: "default" */ diff --git a/library/BuildProfile.ets b/library/BuildProfile.ets index 56a40f4..f787c60 100644 --- a/library/BuildProfile.ets +++ b/library/BuildProfile.ets @@ -1,5 +1,6 @@ export default class BuildProfile { - static readonly HAR_VERSION = '3.0.0-rc.0'; + static readonly HAR_VERSION = '3.0.0-rc.4'; static readonly BUILD_MODE_NAME = 'debug'; static readonly DEBUG = true; + static readonly TARGET_NAME = 'default'; } \ No newline at end of file diff --git a/library/index.ets b/library/index.ets index d0f552e..716467b 100644 --- a/library/index.ets +++ b/library/index.ets @@ -22,4 +22,6 @@ export { BrightnessTransformation } from './src/main/ets/transform/BrightnessTra export { BlurTransformation } from './src/main/ets/transform/BlurTransformation' +export { DownsampleStrategy } from './src/main/ets/downsampling/DownsampleStartegy' + diff --git a/library/src/main/ets/ImageKnifeDispatcher.ets b/library/src/main/ets/ImageKnifeDispatcher.ets index 34d5810..0c714aa 100644 --- a/library/src/main/ets/ImageKnifeDispatcher.ets +++ b/library/src/main/ets/ImageKnifeDispatcher.ets @@ -39,6 +39,9 @@ import { RequestJobRequest } from './model/ImageKnifeData' import { combineArrayBuffers } from './model/utils'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { Downsampler } from './downsampling/Downsampler' +import { DownsampleStrategy } from './downsampling/DownsampleStartegy'; export class ImageKnifeDispatcher { // 最大并发 @@ -144,7 +147,12 @@ export class ImageKnifeDispatcher { .isFileCacheInit() ? currentRequest.imageKnifeOption.writeCacheStrategy : CacheStrategy.Memory, // 未初始化文件缓存时,不写文件缓存 engineKey: this.engineKey, signature: currentRequest.imageKnifeOption.signature, - requestSource + requestSource, + targetWidth: currentRequest.componentWidth, + targetHeight: currentRequest.componentHeight, + downsampType: currentRequest.imageKnifeOption.downsampling, + autoResize:currentRequest.imageKnifeOption.autoResize + } // 启动线程下载和解码主图 let task = new taskpool.Task(requestJob, request) @@ -404,7 +412,6 @@ async function requestJob(request: RequestJobRequest): Promise; - // 自定义缓存关键字 signature?: string; - // 主图填充效果 objectFit?: ImageFit - // 占位图填充效果 placeholderObjectFit?: ImageFit - // 错误图填充效果 errorholderObjectFit?: ImageFit - customGetImage?: (context: Context, src: string | PixelMap | Resource) => Promise - border?: BorderOptions // 缓存策略 writeCacheStrategy?: CacheStrategy // 仅使用缓存加载数据 onlyRetrieveFromCache?: boolean = false; - - priority? : taskpool.Priority = taskpool.Priority.LOW - + priority?: taskpool.Priority = taskpool.Priority.LOW context?: common.UIAbilityContext; progressListener?: (progress: number)=>void; @@ -61,6 +54,11 @@ export class ImageKnifeOption { transformation?: PixelMapTransformation onLoadListener?: OnLoadCallBack | undefined; + progressListener?: (progress: number) => void; + transformation?: PixelMapTransformation; + // 下采样 + downsampling?: DownsampleStrategy = DownsampleStrategy.NONE + autoResize?:boolean constructor() { } diff --git a/library/src/main/ets/ImageKnifeRequest.ets b/library/src/main/ets/ImageKnifeRequest.ets index 071c71b..c5fabc3 100644 --- a/library/src/main/ets/ImageKnifeRequest.ets +++ b/library/src/main/ets/ImageKnifeRequest.ets @@ -15,7 +15,7 @@ import { ImageKnifeOption } from './ImageKnifeOption'; import common from '@ohos.app.ability.common'; import { ImageKnifeRequestSource } from './model/ImageKnifeData'; - +import { DownsampleStrategy } from './downsampling/DownsampleStartegy'; export class ImageKnifeRequest { requestState: ImageKnifeRequestState = ImageKnifeRequestState.PROGRESS @@ -25,20 +25,29 @@ export class ImageKnifeRequest { context: common.UIAbilityContext ImageKnifeRequestCallback: ImageKnifeRequestCallback componentVersion: number = 0 - headers: Map = new Map() + headers: Map = new Map() + downsampType?: DownsampleStrategy + autoResizes?:boolean + constructor(option: ImageKnifeOption, uIAbilityContext: common.UIAbilityContext, width: number, height: number, version: number, - ImageKnifeRequestCallback: ImageKnifeRequestCallback) { + ImageKnifeRequestCallback: ImageKnifeRequestCallback, + downsampType?: DownsampleStrategy, + autoResizes?:boolean + ) { this.imageKnifeOption = option this.context = uIAbilityContext this.componentWidth = width this.componentHeight = height this.componentVersion = version this.ImageKnifeRequestCallback = ImageKnifeRequestCallback + this.downsampType = downsampType + this.autoResizes = autoResizes } + // RequestOption调用header对于的方法 addHeader(key: string, value: Object) { this.headers.set(key, value); @@ -63,5 +72,5 @@ export enum ImageKnifeRequestState { export interface ImageKnifeRequestCallback { - showPixelMap: (version: number, pixelMap: PixelMap | string , requestSource: ImageKnifeRequestSource) => void; + showPixelMap: (version: number, pixelMap: PixelMap | string, requestSource: ImageKnifeRequestSource) => void; } diff --git a/library/src/main/ets/components/ImageKnifeComponent.ets b/library/src/main/ets/components/ImageKnifeComponent.ets index 2d8c3bd..302a08f 100644 --- a/library/src/main/ets/components/ImageKnifeComponent.ets +++ b/library/src/main/ets/components/ImageKnifeComponent.ets @@ -18,6 +18,7 @@ import common from '@ohos.app.ability.common'; import { ImageKnife } from '../ImageKnife'; import { LogUtil } from '../utils/LogUtil'; import { ImageKnifeRequestSource } from '../model/ImageKnifeData'; +import { Downsampler } from '../downsampling/Downsampler'; @Component export struct ImageKnifeComponent { @@ -33,6 +34,8 @@ export struct ImageKnifeComponent { private currentHeight: number = 0 private componentVersion: number = 0 private currentContext: common.UIAbilityContext | undefined = undefined + private targetHeight: number =0 + private targetWidth: number =0 aboutToAppear(): void { //闪动问题失效,注释相应代码后续修复 @@ -82,7 +85,10 @@ export struct ImageKnifeComponent { ImageKnife.getInstance().execute(this.getRequest(this.currentWidth, this.currentHeight)) } } - }) + }).sourceSize({ + width:250, + height:250 + }) } watchImageKnifeOption() { @@ -116,8 +122,9 @@ export struct ImageKnifeComponent { } this.pixelMap = pixelMap if (typeof this.pixelMap !== 'string') { + let info =await this.pixelMap.getImageInfo() + //图片自适应处理 if (this.imageKnifeOption.objectFit === ImageFit.Auto) { - let info = await this.pixelMap.getImageInfo() this.adaptiveWidth = this.currentWidth this.adaptiveHeight = info.size.height * this.currentWidth / info.size.width diff --git a/library/src/main/ets/model/ImageKnifeData.ets b/library/src/main/ets/model/ImageKnifeData.ets index f2abd25..ad15aa4 100644 --- a/library/src/main/ets/model/ImageKnifeData.ets +++ b/library/src/main/ets/model/ImageKnifeData.ets @@ -17,6 +17,7 @@ import { ImageKnifeRequest } from '../ImageKnifeRequest' import { IEngineKey } from '../key/IEngineKey' import { PixelMapTransformation } from '../transform/PixelMapTransformation' import common from '@ohos.app.ability.common'; +import { DownsampleStrategy} from '../downsampling/DownsampleStartegy' export interface ImageKnifeData { source: PixelMap | string, @@ -60,7 +61,10 @@ export interface RequestJobResult { fileKey: string loadFail?: string, } - +export interface targetCcaleType { + width: number, + height: number +} /** * request子线程处理时的请求参数 */ @@ -76,5 +80,9 @@ export interface RequestJobRequest { writeCacheStrategy?: CacheStrategy signature?: string engineKey: IEngineKey + targetWidth:number + targetHeight: number + downsampType?:DownsampleStrategy + autoResize?:boolean }