forked from floraachy/ImageKnife
!33 1.ImageKnifeComponent组件默认开启GPU渲染
Merge pull request !33 from zhoulisheng1/enablegpu
This commit is contained in:
commit
67e52d416a
|
@ -452,7 +452,7 @@ request.skipMemoryCache(true)
|
||||||
|
|
||||||
在下述版本验证通过:
|
在下述版本验证通过:
|
||||||
|
|
||||||
DevEco Studio: 3.1Beta2(3.1.0.400), SDK: API9 Release(3.2.11.9)
|
DevEco Studio版本: 4.0Canary1(4.0.0.112), SDK: API10(4.0.7.3)
|
||||||
|
|
||||||
## 目录结构
|
## 目录结构
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,14 @@ import ArkWorker from '@ohos.worker'
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
struct PngjTestCasePage {
|
struct PngjTestCasePage {
|
||||||
pngSource: ArrayBuffer = new ArrayBuffer(0);
|
pngSource1: ArrayBuffer = undefined;
|
||||||
|
pngSource2: ArrayBuffer = undefined;
|
||||||
|
pngSource3: ArrayBuffer = undefined;
|
||||||
|
pngSource4: ArrayBuffer = undefined;
|
||||||
|
pngdecodeRun1: boolean = false;
|
||||||
|
pngdecodeRun2: boolean = false;
|
||||||
|
pngdecodeRun3: boolean = false;
|
||||||
|
pngdecodeRun4: boolean = false;
|
||||||
rootFolder: string = '';
|
rootFolder: string = '';
|
||||||
@State hint1: string = 'readPngImageInfo内容展示'
|
@State hint1: string = 'readPngImageInfo内容展示'
|
||||||
@State hint2: string = 'readPngImage内容展示'
|
@State hint2: string = 'readPngImage内容展示'
|
||||||
|
@ -31,132 +38,193 @@ struct PngjTestCasePage {
|
||||||
@State hint5: string = '测试readMetadata'
|
@State hint5: string = '测试readMetadata'
|
||||||
@State hint6: string = '测试writeMetadata'
|
@State hint6: string = '测试writeMetadata'
|
||||||
@State hint7: string = '首先点击获取PNG图片buffer'
|
@State hint7: string = '首先点击获取PNG图片buffer'
|
||||||
|
@State hint8: string = '首先点击获取PNG图片buffer'
|
||||||
|
@State hint9: string = '首先点击获取PNG图片buffer'
|
||||||
|
@State hint10: string = '首先点击获取PNG图片buffer'
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
Scroll() {
|
Scroll() {
|
||||||
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
||||||
Text('pngj接口测试列表').fontSize(20)
|
Text('pngj接口测试列表').fontSize(20)
|
||||||
|
|
||||||
Button(this.hint7).fontSize(30)
|
|
||||||
.onClick(() => {
|
|
||||||
|
|
||||||
this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir;
|
|
||||||
|
|
||||||
|
|
||||||
globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.pngSample').id)
|
|
||||||
.then(data => {
|
|
||||||
this.pngSource = FileUtils.getInstance().uint8ArrayToBuffer(data);
|
|
||||||
this.hint7 = '获取buffer成功,可以测试'
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.log('点击获取Png图片buffer err=' + err)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
// Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
|
||||||
// Button('测试readPngImageInfo')
|
|
||||||
// .onClick(() => {
|
|
||||||
// let pngj = new Pngj();
|
|
||||||
// pngj.readPngImageInfo(this.pngSource, (sender, value) => {
|
|
||||||
// this.hint1 = JSON.stringify(value);
|
|
||||||
// })
|
|
||||||
// }).margin({ top: 5, left: 10 })
|
|
||||||
// Button('测试readPngImage')
|
|
||||||
// .onClick(() => {
|
|
||||||
// let pngj = new Pngj();
|
|
||||||
// pngj.readPngImage(this.pngSource, (sender, value) => {
|
|
||||||
// this.hint2 = 'img with=' + value.width + ' img height=' + value.height
|
|
||||||
// + ' img depth=' + value.depth + ' img ctype=' + value.ctype
|
|
||||||
// console.log('png data =' + value.data);
|
|
||||||
// })
|
|
||||||
// }).margin({ top: 5, left: 10 })
|
|
||||||
// Button('测试writePngWithString')
|
|
||||||
// .onClick(() => {
|
|
||||||
// let pngj = new Pngj();
|
|
||||||
// pngj.writePngWithString('hello world', this.pngSource, (sender, value) => {
|
|
||||||
//
|
|
||||||
// FileUtils.getInstance().createFileProcess(
|
|
||||||
// this.rootFolder + '/pngj',
|
|
||||||
// this.rootFolder + '/pngj/newPng.png',
|
|
||||||
// value)
|
|
||||||
// let png1 = new Uint8Array(value)
|
|
||||||
// this.hint3 = 'png写入后长度' + png1.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng.png' + '保存后使用2进制查看数据是否新增'
|
|
||||||
// })
|
|
||||||
// }).margin({ top: 5, left: 10 })
|
|
||||||
// Button('测试writePng')
|
|
||||||
// .onClick(() => {
|
|
||||||
// let pngj = new Pngj();
|
|
||||||
// pngj.writePng(this.pngSource, (sender, value) => {
|
|
||||||
// FileUtils.getInstance().createFileProcess(
|
|
||||||
// this.rootFolder + '/pngj',
|
|
||||||
// this.rootFolder + '/pngj/newPng2.png',
|
|
||||||
// value)
|
|
||||||
// let png2 = new Uint8Array(value)
|
|
||||||
// this.hint4 = 'png2未写入长度' + png2.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng2.png' + '保存后使用2进制查看数据是否新增'
|
|
||||||
// })
|
|
||||||
// }).margin({ top: 5, left: 10 })
|
|
||||||
// }.width('100%')
|
|
||||||
// .height(60).backgroundColor(Color.Pink)
|
|
||||||
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
||||||
|
|
||||||
|
Button(this.hint7).fontSize(30)
|
||||||
|
.onClick(() => {
|
||||||
|
this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir;
|
||||||
|
globalThis.ImageKnife.getImageKnifeContext()
|
||||||
|
.resourceManager
|
||||||
|
.getMedia($r('app.media.pngSample').id)
|
||||||
|
.then(data => {
|
||||||
|
this.pngSource1 = FileUtils.getInstance().uint8ArrayToBuffer(data);
|
||||||
|
this.hint7 = '获取buffer成功,可以测试'
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('点击获取Png图片buffer err=' + err)
|
||||||
|
})
|
||||||
|
})
|
||||||
Button('测试readPng')
|
Button('测试readPng')
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
let pngj = new Pngj();
|
|
||||||
pngj.readPngImageInfo(this.pngSource, (sender, value) => {
|
if (this.pngSource1) {
|
||||||
this.hint1 = JSON.stringify(value);
|
if (!this.pngdecodeRun1) {
|
||||||
})
|
this.pngdecodeRun1 = true;
|
||||||
|
let pngj = new Pngj();
|
||||||
|
pngj.readPngImageInfo(this.pngSource1, (sender, value) => {
|
||||||
|
this.hint1 = JSON.stringify(value);
|
||||||
|
this.pngdecodeRun1 = false;
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.hint7 = '已经在执行了,请稍等'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.hint7 = '请先点击此处获取buffer'
|
||||||
|
}
|
||||||
}).margin({ top: 5, left: 10 })
|
}).margin({ top: 5, left: 10 })
|
||||||
|
|
||||||
|
|
||||||
|
}.width('100%')
|
||||||
|
.height(60).backgroundColor(Color.Pink)
|
||||||
|
|
||||||
|
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
||||||
|
Button(this.hint8).fontSize(30)
|
||||||
|
.onClick(() => {
|
||||||
|
this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir;
|
||||||
|
globalThis.ImageKnife.getImageKnifeContext()
|
||||||
|
.resourceManager
|
||||||
|
.getMedia($r('app.media.pngSample').id)
|
||||||
|
.then(data => {
|
||||||
|
this.pngSource2 = FileUtils.getInstance().uint8ArrayToBuffer(data);
|
||||||
|
this.hint8 = '获取buffer成功,可以测试'
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('点击获取Png图片buffer err=' + err)
|
||||||
|
})
|
||||||
|
})
|
||||||
Button('readPngAsync')
|
Button('readPngAsync')
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
let pngj = new Pngj();
|
|
||||||
let worker = new ArkWorker.Worker('entry/ets/pages/workers/worker1.js', {
|
if (this.pngSource2) {
|
||||||
type: 'classic',
|
if (!this.pngdecodeRun2) {
|
||||||
name: 'readPngImageAsync'
|
this.pngdecodeRun2 = true;
|
||||||
})
|
let pngj = new Pngj();
|
||||||
pngj.readPngImageAsync(worker, this.pngSource, (sender, value) => {
|
let worker = new ArkWorker.Worker('entry/ets/pages/workers/worker1.js', {
|
||||||
this.pngSource = sender
|
type: 'classic',
|
||||||
this.hint2 = 'img with=' + value.width + ' img height=' + value.height
|
name: 'readPngImageAsync'
|
||||||
+ ' img depth=' + value.depth + ' img ctype=' + value.ctype
|
})
|
||||||
})
|
pngj.readPngImageAsync(worker, this.pngSource1, (sender, value) => {
|
||||||
|
this.pngSource1 = sender
|
||||||
|
this.hint2 = 'img with=' + value.width + ' img height=' + value.height
|
||||||
|
+ ' img depth=' + value.depth + ' img ctype=' + value.ctype
|
||||||
|
this.pngdecodeRun2 = false;
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.hint8 = '已经在执行了,请稍等'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.hint8 = '请先点击此处获取buffer'
|
||||||
|
}
|
||||||
|
|
||||||
}).margin({ top: 5, left: 10 })
|
}).margin({ top: 5, left: 10 })
|
||||||
|
|
||||||
}.width('100%')
|
}.width('100%')
|
||||||
.height(60).backgroundColor(Color.Pink)
|
.height(60).backgroundColor(Color.Pink)
|
||||||
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
|
||||||
|
|
||||||
|
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
||||||
|
Button(this.hint9).fontSize(30)
|
||||||
|
.onClick(() => {
|
||||||
|
this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir;
|
||||||
|
globalThis.ImageKnife.getImageKnifeContext()
|
||||||
|
.resourceManager
|
||||||
|
.getMedia($r('app.media.pngSample').id)
|
||||||
|
.then(data => {
|
||||||
|
this.pngSource3 = FileUtils.getInstance().uint8ArrayToBuffer(data);
|
||||||
|
this.hint9 = '获取buffer成功,可以测试'
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('点击获取Png图片buffer err=' + err)
|
||||||
|
})
|
||||||
|
})
|
||||||
Button('测试writePngWithString')
|
Button('测试writePngWithString')
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
let pngj = new Pngj();
|
|
||||||
let worker = new ArkWorker.Worker('entry/ets/pages/workers/worker1.js', {
|
if (this.pngSource3) {
|
||||||
type: 'classic',
|
if (!this.pngdecodeRun3) {
|
||||||
name: 'writePngWithStringAsync'
|
this.pngdecodeRun3 = true;
|
||||||
})
|
let pngj = new Pngj();
|
||||||
pngj.writePngWithStringAsync(worker, 'hello world', this.pngSource, (sender, value) => {
|
let worker = new ArkWorker.Worker('entry/ets/pages/workers/worker1.js', {
|
||||||
this.pngSource = sender
|
type: 'classic',
|
||||||
FileUtils.getInstance().createFileProcess(
|
name: 'writePngWithStringAsync'
|
||||||
this.rootFolder + '/pngj',
|
})
|
||||||
this.rootFolder + '/pngj/newPng.png',
|
pngj.writePngWithStringAsync(worker, 'hello world', this.pngSource3, (sender, value) => {
|
||||||
value)
|
this.pngSource3 = sender
|
||||||
let png1 = new Uint8Array(value)
|
FileUtils.getInstance().createFileProcess(
|
||||||
this.hint3 = 'png写入后长度' + png1.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng.png' + '保存后使用2进制查看数据是否新增'
|
this.rootFolder + '/pngj',
|
||||||
})
|
this.rootFolder + '/pngj/newPng.png',
|
||||||
|
value)
|
||||||
|
let png1 = new Uint8Array(value)
|
||||||
|
this.hint3 = 'png写入后长度' + png1.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng.png' + '保存后使用2进制查看数据是否新增'
|
||||||
|
this.pngdecodeRun3 = false;
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.hint9 = '已经在执行了,请稍等'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.hint9 = '请先点击此处获取buffer'
|
||||||
|
}
|
||||||
|
|
||||||
}).margin({ top: 5, left: 10 })
|
}).margin({ top: 5, left: 10 })
|
||||||
|
|
||||||
|
}.width('100%')
|
||||||
|
.height(60).backgroundColor(Color.Pink)
|
||||||
|
|
||||||
|
|
||||||
|
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
|
||||||
|
|
||||||
|
Button(this.hint10).fontSize(30)
|
||||||
|
.onClick(() => {
|
||||||
|
this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir;
|
||||||
|
globalThis.ImageKnife.getImageKnifeContext()
|
||||||
|
.resourceManager
|
||||||
|
.getMedia($r('app.media.pngSample').id)
|
||||||
|
.then(data => {
|
||||||
|
this.pngSource4 = FileUtils.getInstance().uint8ArrayToBuffer(data);
|
||||||
|
this.hint10 = '获取buffer成功,可以测试'
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('点击获取Png图片buffer err=' + err)
|
||||||
|
})
|
||||||
|
})
|
||||||
Button('writePng')
|
Button('writePng')
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
let pngj = new Pngj();
|
|
||||||
let worker = new ArkWorker.Worker('entry/ets/pages/workers/worker1.js', {
|
if (this.pngSource4) {
|
||||||
type: 'classic',
|
if (!this.pngdecodeRun4) {
|
||||||
name: 'writePngAsync'
|
this.pngdecodeRun4 = true;
|
||||||
})
|
let pngj = new Pngj();
|
||||||
pngj.writePngAsync(worker, this.pngSource, (sender, value) => {
|
let worker = new ArkWorker.Worker('entry/ets/pages/workers/worker1.js', {
|
||||||
this.pngSource = sender
|
type: 'classic',
|
||||||
FileUtils.getInstance().createFileProcess(
|
name: 'writePngAsync'
|
||||||
this.rootFolder + '/pngj',
|
})
|
||||||
this.rootFolder + '/pngj/newPng2.png',
|
pngj.writePngAsync(worker, this.pngSource4, (sender, value) => {
|
||||||
value)
|
this.pngSource4 = sender
|
||||||
let png2 = new Uint8Array(value)
|
FileUtils.getInstance().createFileProcess(
|
||||||
this.hint4 = 'png2未写入长度' + png2.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng2.png' + '保存后使用2进制查看数据是否新增'
|
this.rootFolder + '/pngj',
|
||||||
})
|
this.rootFolder + '/pngj/newPng2.png',
|
||||||
|
value)
|
||||||
|
let png2 = new Uint8Array(value)
|
||||||
|
this.hint4 = 'png2未写入长度' + png2.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng2.png' + '保存后使用2进制查看数据是否新增'
|
||||||
|
this.pngdecodeRun4 = false;
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.hint10 = '已经在执行了,请稍等'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.hint10 = '请先点击此处获取buffer'
|
||||||
|
}
|
||||||
|
|
||||||
}).margin({ top: 5, left: 10 })
|
}).margin({ top: 5, left: 10 })
|
||||||
}.width('100%')
|
}.width('100%')
|
||||||
.height(60).backgroundColor(Color.Pink)
|
.height(60).backgroundColor(Color.Pink)
|
||||||
|
|
|
@ -249,6 +249,17 @@ export struct ImageKnifeComponent {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
configRenderGpu(request: RequestOption){
|
||||||
|
if(this.imageKnifeOption.enableGpu){
|
||||||
|
request.enableGPU()
|
||||||
|
}else{
|
||||||
|
// 如果enableGpu未设置则不启动GPU渲染
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// imageknife 第一次启动和数据刷新后重新发送请求
|
// imageknife 第一次启动和数据刷新后重新发送请求
|
||||||
imageKnifeExecute() {
|
imageKnifeExecute() {
|
||||||
if (this.imageKnifeOption == null || this.imageKnifeOption.loadSrc == null) {
|
if (this.imageKnifeOption == null || this.imageKnifeOption.loadSrc == null) {
|
||||||
|
@ -265,6 +276,7 @@ export struct ImageKnifeComponent {
|
||||||
this.configNecessary(request);
|
this.configNecessary(request);
|
||||||
this.configCacheStrategy(request);
|
this.configCacheStrategy(request);
|
||||||
this.configDisplay(request);
|
this.configDisplay(request);
|
||||||
|
this.configRenderGpu(request);
|
||||||
globalThis.ImageKnife.call(request);
|
globalThis.ImageKnife.call(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,8 @@ export class ImageKnifeOption {
|
||||||
loadSrc: string | PixelMap | Resource;
|
loadSrc: string | PixelMap | Resource;
|
||||||
mainScaleType?: ScaleType = ScaleType.FIT_CENTER
|
mainScaleType?: ScaleType = ScaleType.FIT_CENTER
|
||||||
|
|
||||||
|
enableGpu?:boolean = true;
|
||||||
|
|
||||||
// 磁盘缓存策略
|
// 磁盘缓存策略
|
||||||
strategy?: DiskStrategy = new AUTOMATIC();
|
strategy?: DiskStrategy = new AUTOMATIC();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue