1.修复ImageKnife绘制部分复杂gif图片,gif图片闪屏显示的问题
Signed-off-by: 明月清风 <2928139825@qq.com>
This commit is contained in:
parent
af5d79426e
commit
8629370f57
|
@ -3,7 +3,7 @@
|
|||
"bundleName": "com.openharmony.imageknife",
|
||||
"vendor": "example",
|
||||
"versionCode": 1000000,
|
||||
"versionName": "1.0.0",
|
||||
"versionName": "2.0.2",
|
||||
"icon": "$media:app_icon",
|
||||
"label": "$string:app_name",
|
||||
"distributedNotificationEnabled": true
|
||||
|
|
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,3 +1,13 @@
|
|||
## 2.0.2
|
||||
|
||||
- 修复若干问题:
|
||||
|
||||
修复ImageKnife绘制部分复杂gif图片,gif图片闪屏显示的问题
|
||||
|
||||
适配DevEco Studio 版本:4.0 Canary2(4.0.3.312), SDK: API10 (4.0.9.3)
|
||||
|
||||
|
||||
|
||||
## 2.0.1
|
||||
|
||||
- 修复若干问题:
|
||||
|
|
|
@ -452,7 +452,7 @@ request.skipMemoryCache(true)
|
|||
|
||||
在下述版本验证通过:
|
||||
|
||||
DevEco Studio版本: 4.0Canary1(4.0.3.212), SDK: API10(4.0.8.3)
|
||||
DevEco Studio 版本:4.0 Canary2(4.0.3.312), SDK: API10 (4.0.9.3)
|
||||
|
||||
## 目录结构
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"license": "ISC",
|
||||
"license": "Apache License 2.0",
|
||||
"devDependencies": {},
|
||||
"name": "entry",
|
||||
"description": "example description",
|
||||
"repository": {},
|
||||
"version": "1.0.0",
|
||||
"version": "2.0.2",
|
||||
"dependencies": {
|
||||
"@ohos/imageknife": "file:../imageknife",
|
||||
"@ohos/disklrucache": "^2.0.0"
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"main": "index.ets",
|
||||
"repository": "https://gitee.com/openharmony-tpc/ImageKnife",
|
||||
"type": "module",
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.2",
|
||||
"dependencies": {
|
||||
"@ohos/disklrucache": "^2.0.0",
|
||||
"@ohos/svg": "^2.0.0",
|
||||
|
|
|
@ -18,7 +18,7 @@ import { LruCache } from "../cache/LruCache"
|
|||
import {EngineKeyFactories} from "../cache/key/EngineKeyFactories"
|
||||
import {EngineKeyInterface} from "../cache/key/EngineKeyInterface"
|
||||
import {RequestOption} from "../imageknife/RequestOption"
|
||||
import {AsyncCallback} from "../imageknife/interface/asynccallback"
|
||||
import {AsyncCallback} from "../imageknife/interface/AsyncCallback"
|
||||
import {PlaceHolderManager} from "../imageknife/holder/PlaceHolderManager"
|
||||
import {RetryHolderManager} from "../imageknife/holder/RetryHolderManager"
|
||||
import {ErrorHolderManager} from "../imageknife/holder/ErrorHolderManager"
|
||||
|
|
|
@ -25,17 +25,12 @@ import { LogUtil } from '../imageknife/utils/LogUtil'
|
|||
@Component
|
||||
export struct ImageKnifeComponent {
|
||||
@Watch('watchImageKnifeOption') @ObjectLink imageKnifeOption: ImageKnifeOption;
|
||||
|
||||
autoPlay: boolean = true
|
||||
|
||||
private settings: RenderingContextSettings = new RenderingContextSettings(true)
|
||||
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
|
||||
private hasDisplayRetryholder = false;
|
||||
|
||||
|
||||
private lastWidth: number = 0
|
||||
private lastHeight: number = 0
|
||||
|
||||
private currentWidth: number = 0
|
||||
private currentHeight: number = 0
|
||||
|
||||
|
@ -85,6 +80,7 @@ export struct ImageKnifeComponent {
|
|||
private canvasHasReady: boolean = false;
|
||||
private firstDrawFlag: boolean = false;
|
||||
private onReadyNext: () => void = undefined
|
||||
|
||||
build() {
|
||||
Canvas(this.context)
|
||||
.width('100%')
|
||||
|
@ -250,8 +246,6 @@ export struct ImageKnifeComponent {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
configRenderGpu(request: RequestOption) {
|
||||
if (this.imageKnifeOption.enableGpu) {
|
||||
request.enableGPU()
|
||||
|
@ -676,10 +670,17 @@ export struct ImageKnifeComponent {
|
|||
if (index >= 1) {
|
||||
let preFrame = frames[index-1]
|
||||
disposal = preFrame.disposalType
|
||||
|
||||
if (disposal === FrameDisposalType.DISPOSE_RestoreBackground) {
|
||||
const { width, height, left, top } = preFrame.dims;
|
||||
context.clearRect(left, top, width, height);
|
||||
}
|
||||
} else {
|
||||
if (disposal === FrameDisposalType.DISPOSE_RestoreBackground) {
|
||||
context.clearRect(0, 0, compWidth, compHeight)
|
||||
}
|
||||
}
|
||||
|
||||
let scaleType = (typeof this.imageKnifeOption.mainScaleType == 'number') ? this.imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER
|
||||
context.save();
|
||||
let frameW = frames[0].dims.left + frames[0].dims.width
|
||||
|
@ -725,7 +726,6 @@ export enum ScaleType {
|
|||
}
|
||||
|
||||
|
||||
|
||||
export class ScaleTypeHelper {
|
||||
static drawImageWithScaleType(context: CanvasRenderingContext2D, scaleType: ScaleType, source: PixelMap | ImageBitmap, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX: number, imageOffsetY: number) {
|
||||
let scaleW = compWidth / imageWidth
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*/
|
||||
|
||||
import { DiskStrategy } from "../cache/diskstrategy/DiskStrategy"
|
||||
import type { AsyncCallback } from "../imageknife/interface/asynccallback"
|
||||
import type { AsyncCallback } from "../imageknife/interface/AsyncCallback"
|
||||
import type { AsyncSuccess } from "../imageknife/interface/AsyncSuccess"
|
||||
import type { IAllCacheInfoCallback } from "../imageknife/interface/IAllCacheInfoCallback"
|
||||
import { AUTOMATIC } from "../cache/diskstrategy/enum/AUTOMATIC"
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
"name": "imageknife",
|
||||
"description": "example description",
|
||||
"repository": {},
|
||||
"version": "1.0.0",
|
||||
"version": "2.0.2",
|
||||
"dependencies": {}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue