From 620abe646800ce90f909d918248e26fd05ab75f1 Mon Sep 17 00:00:00 2001 From: tsm <2418639820@qq.com> Date: Wed, 22 May 2024 16:30:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=8D=E9=87=87=E6=A0=B7=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tsm <2418639820@qq.com> --- .../downsampling/DownsampleStartegy.ets | 67 ++----------------- 1 file changed, 7 insertions(+), 60 deletions(-) diff --git a/library/src/main/ets/components/imageknife/downsampling/DownsampleStartegy.ets b/library/src/main/ets/components/imageknife/downsampling/DownsampleStartegy.ets index c0ae2a9..8223d1e 100644 --- a/library/src/main/ets/components/imageknife/downsampling/DownsampleStartegy.ets +++ b/library/src/main/ets/components/imageknife/downsampling/DownsampleStartegy.ets @@ -24,30 +24,13 @@ export class FitCenter implements BaseDownsampling { //实现 getScaleFactor 方法 getScaleFactor(sourceWidth: number, sourceHeight: number, requestedWidth: number, requestedHeight: number): number { - const IS_BITMAP_FACTORY_SCALING_SUPPORTED = false; //这里需要根据实际情况设置这个值 - if (IS_BITMAP_FACTORY_SCALING_SUPPORTED) { - const widthPercentage = requestedWidth / sourceWidth - const heightPercentage = requestedHeight / sourceHeight - return Math.min(widthPercentage, heightPercentage) - } else { - //类似 AT_LEAST,但只要求一个维度或另一个维度大于等于请求的尺寸 - const maxIntegerFactor = Math.max(sourceHeight / requestedHeight, sourceWidth / requestedWidth); - const a = maxIntegerFactor === 0 ? 1 : 1 / highestOneBit(maxIntegerFactor) - return a; - } + const maxIntegerFactor = Math.max(sourceHeight / requestedHeight, sourceWidth / requestedWidth); + const a = maxIntegerFactor === 0 ? 1 : 1 / highestOneBit(maxIntegerFactor) + return a; } - //实现 getSampleSizeRounding 方法 getSampleSizeRounding(sourceWidth: number, sourceHeight: number, requestedWidth: number, requestedHeight: number): number { - const IS_BITMAP_FACTORY_SCALING_SUPPORTED = true; //这里需要根据实际情况设置这个值 - // if (!IS_BITMAP_FACTORY_SCALING_SUPPORTED) { - // return 0; - // } else { - // TODO: 这个逻辑可能不正确,但是如果不这样做,我们可能会跳过一个采样尺寸,因为 QUALITY 更喜欢宽度和高度缩放因子中比较小的那个 - // MEMORY 折中方案,他让我们更喜欢两者中较大的那个 - // - // } return SampleSizeRounding.MEMORY; } } @@ -131,16 +114,10 @@ export class AtMost implements BaseDownsampling { const maxIntegerFactor = Math.ceil(Math.max(sourceHeight / requestedHeight, sourceWidth / requestedWidth)); let lesserOrEqualSampleSize = Math.max(1, highestOneBit(maxIntegerFactor)); let greaterOrEqualSampleSize = lesserOrEqualSampleSize - // if (lesserOrEqualSampleSize < maxIntegerFactor) { - // let greaterOrEqualSampleSize = lesserOrEqualSampleSize <<= 1; // lest shift by 1 - // } greaterOrEqualSampleSize = lesserOrEqualSampleSize << (lesserOrEqualSampleSize < maxIntegerFactor ? 1 : 0) //返回缩放因子 return 1 / greaterOrEqualSampleSize } - - - //实现 getSampleSizeRounding 方法 getSampleSizeRounding(sourceWidth: number, sourceHeight: number, requestedWidth: number, requestHeight: number): SampleSizeRounding { //根据 AtMost 的逻辑,总是返回 MEMORY @@ -159,25 +136,15 @@ export class CenterInside implements BaseDownsampling { getScaleFactor(sourceWidth: number, sourceHeight: number, requestedWidth: number, requestedHeight: number): number { //获取 FIT_CENTER 的缩放因子 const fitCenterScaleFactor: ESObject = this.getScale(sourceWidth, sourceHeight, requestedWidth, requestedHeight); - //实现 getScaleFactor 方法 //返回不超过 1 的缩放因子,即尽量缩小图像以适应目标尺寸,但不会放大 return Math.min(1, fitCenterScaleFactor); } getScale(sourceWidth: number, sourceHeight: number, requestedWidth: number, requestedHeight: number): number { - const IS_BITMAP_FACTORY_SCALING_SUPPORTED = false; //这里需要根据实际情况设置这个值 - if (IS_BITMAP_FACTORY_SCALING_SUPPORTED) { - const widthPercentage = requestedWidth / sourceWidth - const heightPercentage = requestedHeight / sourceHeight - return Math.min(widthPercentage, heightPercentage) - } else { - //类似 AT_LEAST,但只要求一个维度或另一个维度大于等于请求的尺寸 - const maxIntegerFactor = Math.max(sourceHeight / requestedHeight, sourceWidth / requestedWidth); - - return maxIntegerFactor === 0 ? 1 : 1 / highestOneBit(maxIntegerFactor); - - } + //类似 AT_LEAST + const maxIntegerFactor = Math.max(sourceHeight / requestedHeight, sourceWidth / requestedWidth); + return maxIntegerFactor === 0 ? 1 : 1 / highestOneBit(maxIntegerFactor); } @@ -190,27 +157,7 @@ export class CenterInside implements BaseDownsampling { //否则,使用 FIL_CENTER 的 SampleSizeRounding 值 return this.getSampleSize(sourceWidth, sourceHeight, requestedWidth, requestedHeight); } - //实现 getSampleSizeRounding 方法 getSampleSize(sourceWidth: number, sourceHeight: number, requestedWidth: number, requestedHeight: number): SampleSizeRounding { - const IS_BITMAP_FACTORY_SCALING_SUPPORTED = true; //这里需要根据实际情况设置这个值 - - if (IS_BITMAP_FACTORY_SCALING_SUPPORTED) { - return 0; - } else { - // TODO: 这个逻辑可能不正确,但是如果不这样做,我们可能会跳过一个采样尺寸,因为 QUALITY 更喜欢宽度和高度缩放因子中比较小的那个 - // MEMORY 折中方案,他让我们更喜欢两者中较大的那个 - // - // } - return SampleSizeRounding.MEMORY; - } + return SampleSizeRounding.MEMORY; } -} - -export enum DownsampleStrategy { - AT_LEAST, - AT_MOST, - FIT_CENTER, - CENTER_INSIDE, - CENTER_OUTSIDE, - NONE, } \ No newline at end of file