diff --git a/hvigor/hvigor-config.json5 b/hvigor/hvigor-config.json5 index 122677b..69b4a2d 100644 --- a/hvigor/hvigor-config.json5 +++ b/hvigor/hvigor-config.json5 @@ -1,6 +1,6 @@ { - "hvigorVersion": "3.0.9", + "hvigorVersion": "4.1.2", "dependencies": { - "@ohos/hvigor-ohos-plugin": "3.0.9" + "@ohos/hvigor-ohos-plugin": "4.1.2" } } \ No newline at end of file diff --git a/library/src/main/ets/components/imageknife/Downsampling/BaseDownsampling.ets b/library/src/main/ets/components/imageknife/Downsampling/BaseDownsampling.ets index 317587f..fa7add3 100644 --- a/library/src/main/ets/components/imageknife/Downsampling/BaseDownsampling.ets +++ b/library/src/main/ets/components/imageknife/Downsampling/BaseDownsampling.ets @@ -1,2 +1,6 @@ -/* - * asdfasdfasdfasdfasdf*/ \ No newline at end of file +export interface BaseDownsampling{ + getScaleFactor(sourceWidth:number, sourceHeight:number, requestWidth:number, requestHeight:number):number + + + getSampleSizeRounding(sourceWidth:number, sourceHeight:number, requestWidth:number, requestHeight:number):number +} \ No newline at end of file diff --git a/library/src/main/ets/components/imageknife/Downsampling/DownsampleStartegy.ets b/library/src/main/ets/components/imageknife/Downsampling/DownsampleStartegy.ets index 87de8a4..01fe132 100644 --- a/library/src/main/ets/components/imageknife/Downsampling/DownsampleStartegy.ets +++ b/library/src/main/ets/components/imageknife/Downsampling/DownsampleStartegy.ets @@ -1,2 +1,79 @@ -/* - * dsasdafasdfasdf*/ \ No newline at end of file +import { BaseDownsampling } from './BaseDownsampling' + + +export class CenterInside{ + getScaleFactor(sourceWidth:number, sourceHeight:number,requestWidth:number, requestHeight:number):number { + + return Math.min(1,FitCenter.getScaleFactor(sourceWidth, sourceHeight, requestWidth, requestHeight)) + } + getSampleSizeRounding(sourceWidth:number, sourceHeight:number, requestWidth:number, requestHeight:number):SampleSizeRounding { + return this.getScaleFactor(sourceWidth, sourceHeight, requestWidth, requestHeight)==1 + ?SampleSizeRounding.QUALITY + :FitCenter.getSampleSizeRounding(sourceWidth, sourceHeight, requestWidth, requestHeight) + + } + +} +/*不进行下采样*/ +export class DownsampleNone implements BaseDownsampling{ + getScaleFactor(sourceWidth: number, sourceHeight: number, requestWidth: number, requestHeight: number): number { + return 1 + } + + getSampleSizeRounding(sourceWidth: number, sourceHeight: number, requestWidth: number, requestHeight: number): number { + return SampleSizeRounding.QUALITY + } + +} +/* 下采样使得图像的组大尺寸在给定的尺寸的1/2之间*/ + export class AtMost implements BaseDownsampling{ + getScaleFactor(sourceWidth: number, sourceHeight: number, requestWidth:number,requestHeight: number): number { + let maxIntegerFactor=Math.ceil(Math.max(sourceHeight/requestHeight,sourceWidth/requestWidth)); + let lesserOrEqualSampleSize = Math.max(1,highestOneBit(maxIntegerFactor)) + let greaterOrEqualSampleSize = lesserOrEqualSampleSize<<(lesserOrEqualSampleSize | undefined = undefined; @@ -502,6 +505,10 @@ export class RequestOption { this.gpuEnabled = true; return this; } + downsampleStrategy(downsampType: ESObject){ + this.downsampType = downsampType + return this; + } // 占位图解析成功 placeholderOnComplete = (imageKnifeData:ImageKnifeData) => { diff --git a/library/src/main/ets/components/imageknife/interface/IParseImage.ets b/library/src/main/ets/components/imageknife/interface/IParseImage.ets index 9713810..2b6d37c 100644 --- a/library/src/main/ets/components/imageknife/interface/IParseImage.ets +++ b/library/src/main/ets/components/imageknife/interface/IParseImage.ets @@ -13,8 +13,10 @@ * limitations under the License. */ import { BusinessError } from '@ohos.base' +import { RequestOption } from '../RequestOption'; + export interface IParseImage { - parseImage:(imageinfo:ArrayBuffer, onCompleteFunction:(value:T)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void)=>void; + parseImage:(imageinfo:ArrayBuffer, onCompleteFunction:(value:T)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void,request?:RequestOption)=>void; parseImageThumbnail:(scale:number, imageinfo:ArrayBuffer, onCompleteFunction:(value:T)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void)=>void; } \ No newline at end of file diff --git a/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets b/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets index a415276..3a76ae4 100644 --- a/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets +++ b/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets @@ -188,7 +188,7 @@ export class RequestManager { let success = (value: PixelMap) => { onComplete(value); } - this.mParseImageUtil.parseImage(arrayBuffer, success, onError) + this.mParseImageUtil.parseImage(arrayBuffer, success, onError,request) } } } diff --git a/library/src/main/ets/components/imageknife/utils/ParseImageUtil.ets b/library/src/main/ets/components/imageknife/utils/ParseImageUtil.ets index fd3cb98..2788f60 100644 --- a/library/src/main/ets/components/imageknife/utils/ParseImageUtil.ets +++ b/library/src/main/ets/components/imageknife/utils/ParseImageUtil.ets @@ -16,15 +16,14 @@ import { IParseImage } from '../interface/IParseImage' import image from '@ohos.multimedia.image'; import { BusinessError } from '@ohos.base' -import taskpool from '@ohos.taskpool'; -import { LogUtil } from './LogUtil'; +import { RequestOption } from '../RequestOption'; export class ParseImageUtil implements IParseImage { - parseImage(imageinfo: ArrayBuffer, onCompleteFunction: (value: PixelMap) => void | PromiseLike, onErrorFunction: (reason?: BusinessError | string) => void) { - this.parseImageThumbnail(1, imageinfo, onCompleteFunction, onErrorFunction) + parseImage(imageinfo: ArrayBuffer, onCompleteFunction: (value: PixelMap) => void | PromiseLike, onErrorFunction: (reason?: BusinessError | string) => void,request?:RequestOption) { + this.parseImageThumbnail(1, imageinfo, onCompleteFunction, onErrorFunction,request) } - parseImageThumbnail(scale: number, imageinfo: ArrayBuffer, onCompleteFunction: (value: PixelMap) => void | PromiseLike, onErrorFunction: (reason?: BusinessError | string) => void) { + parseImageThumbnail(scale: number, imageinfo: ArrayBuffer, onCompleteFunction: (value: PixelMap) => void | PromiseLike, onErrorFunction: (reason?: BusinessError | string) => void,request?:RequestOption) { let imageSource: image.ImageSource = image.createImageSource(imageinfo); // 步骤一:文件转为pixelMap 然后变换 给Image组件 imageSource.getImageInfo().then((value) => { @@ -38,6 +37,15 @@ export class ParseImageUtil implements IParseImage { editable: true, desiredSize: defaultSize }; + const b = new Downsamper(imageinfo, hValue, wValue, requ,request) + let options: image.DecodingOptions = { + editable: true, + desiredSize: { + height: b.targetHeight, + width: b.targetWidth + } + }; + imageSource.createPixelMap(opts).then((pixelMap: image.PixelMap) => { onCompleteFunction(pixelMap);