1.transform code optimization
Signed-off-by: zhoulisheng <635547767@qq.com>
This commit is contained in:
parent
e5b00ce028
commit
d60369beba
|
@ -13,11 +13,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
import {fastBlur} from "../utils/FastBlur"
|
import {fastBlur} from "../utils/FastBlur"
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,10 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,58 +73,24 @@ export class BrightnessFilterTransformation implements BaseTransform<PixelMap> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let data = await imageSource.createPixelMap(options);
|
let data = await imageSource.createPixelMap(options);
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
|
|
||||||
for (let w = 0;w <= targetWidth; w++) {
|
let bufferData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
for (let h = 0;h <= targetHeight; h++) {
|
await data.readPixelsToBuffer(bufferData);
|
||||||
var buffer = new ArrayBuffer(5);
|
|
||||||
|
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
var dataArray = new Uint8Array(bufferData);
|
||||||
var positionRen = {
|
|
||||||
pixels: buffer,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
|
|
||||||
|
for (let index = 0; index < dataArray.length; index += 4) {
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
dataArray[index] = this.checkVisAble(dataArray[index] * this._mBrightness + dataArray[index]);
|
||||||
var bytes = new Uint8Array(buffer);
|
dataArray[index+1] = this.checkVisAble(dataArray[index+1] * this._mBrightness + dataArray[index+1]);
|
||||||
var buffer1B = new ArrayBuffer(5);
|
dataArray[index+2] = this.checkVisAble(dataArray[index+2] * this._mBrightness + dataArray[index+2]);
|
||||||
var bytes1B = new Uint8Array(buffer1B);
|
dataArray[index+3] = this.checkVisAble(dataArray[index+3] * this._mBrightness + dataArray[index+3]);
|
||||||
var writePositionRenB = {
|
|
||||||
pixels: buffer1B,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bytes1B[0] = bytes[0];
|
|
||||||
bytes1B[1] = this.checkVisAble(bytes[1] * this._mBrightness + bytes[1]);
|
|
||||||
bytes1B[2] = this.checkVisAble(bytes[2] * this._mBrightness + bytes[2]);
|
|
||||||
bytes1B[3] = this.checkVisAble(bytes[3] * this._mBrightness + bytes[3]);
|
|
||||||
bytes1B[4] = bytes[4];
|
|
||||||
data.writePixels(writePositionRenB, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await data.writeBufferToPixels(bufferData);
|
||||||
|
|
||||||
|
if (func) {
|
||||||
func("", data);
|
func("", data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private checkVisAble(input: number) {
|
private checkVisAble(input: number) {
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,58 +86,24 @@ export class ContrastFilterTransformation implements BaseTransform<PixelMap> {
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = await imageSource.createPixelMap(options);
|
let data = await imageSource.createPixelMap(options);
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
|
|
||||||
for (let w = 0;w <= targetWidth; w++) {
|
let bufferData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
for (let h = 0;h <= targetHeight; h++) {
|
await data.readPixelsToBuffer(bufferData);
|
||||||
var buffer = new ArrayBuffer(5);
|
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
var dataArray = new Uint8Array(bufferData);
|
||||||
var positionRen = {
|
|
||||||
pixels: buffer,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
|
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
|
||||||
var bytes = new Uint8Array(buffer);
|
|
||||||
var buffer1B = new ArrayBuffer(5);
|
|
||||||
var bytes1B = new Uint8Array(buffer1B);
|
|
||||||
var writePositionRenB = {
|
|
||||||
pixels: buffer1B,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let brightness = 0; //亮度的偏移量,可以默认0
|
let brightness = 0; //亮度的偏移量,可以默认0
|
||||||
|
for (let index = 0; index < dataArray.length; index += 4) {
|
||||||
bytes1B[0] = bytes[0];
|
dataArray[index] = this.checkVisAble((dataArray[index] - 127) * this._mContrast + brightness + 127);
|
||||||
bytes1B[1] = this.checkVisAble((bytes[1] - 127) * this._mContrast + brightness + 127);
|
dataArray[index+1] = this.checkVisAble((dataArray[index+1] - 127) * this._mContrast + brightness + 127);
|
||||||
bytes1B[2] = this.checkVisAble((bytes[2] - 127) * this._mContrast + brightness + 127);
|
dataArray[index+2] = this.checkVisAble((dataArray[index+2] - 127) * this._mContrast + brightness + 127);
|
||||||
bytes1B[3] = this.checkVisAble((bytes[3] - 127) * this._mContrast + brightness + 127);
|
dataArray[index+3] = this.checkVisAble((dataArray[index+3] - 127) * this._mContrast + brightness + 127);
|
||||||
bytes1B[4] = bytes[4];
|
|
||||||
data.writePixels(writePositionRenB, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await data.writeBufferToPixels(bufferData);
|
||||||
|
if (func) {
|
||||||
func("", data);
|
func("", data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private checkVisAble(input: number) {
|
private checkVisAble(input: number) {
|
||||||
|
|
|
@ -13,12 +13,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
|
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
export class CropCircleTransformation implements BaseTransform<PixelMap> {
|
export class CropCircleTransformation implements BaseTransform<PixelMap> {
|
||||||
|
@ -26,7 +25,6 @@ export class CropCircleTransformation implements BaseTransform<PixelMap> {
|
||||||
private mCenterX: number= 0;
|
private mCenterX: number= 0;
|
||||||
private mCenterY: number= 0;
|
private mCenterY: number= 0;
|
||||||
private mRadius: number= 0;
|
private mRadius: number= 0;
|
||||||
private mTransform_pixelMap: any;
|
|
||||||
|
|
||||||
getName() {
|
getName() {
|
||||||
return CropCircleTransformation.TAG + ";mCenterX:" + this.mCenterX
|
return CropCircleTransformation.TAG + ";mCenterX:" + this.mCenterX
|
||||||
|
@ -86,9 +84,8 @@ export class CropCircleTransformation implements BaseTransform<PixelMap> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private async transformCircle(p: PixelMap, func?: AsyncTransform<PixelMap>) {
|
private async transformCircle(data: any, func?: AsyncTransform<PixelMap>) {
|
||||||
this.mTransform_pixelMap = p;
|
let imageInfo = await data.getImageInfo();
|
||||||
let imageInfo = await this.mTransform_pixelMap.getImageInfo();
|
|
||||||
let size = {
|
let size = {
|
||||||
width: imageInfo.size.width,
|
width: imageInfo.size.width,
|
||||||
height: imageInfo.size.height
|
height: imageInfo.size.height
|
||||||
|
@ -109,37 +106,27 @@ export class CropCircleTransformation implements BaseTransform<PixelMap> {
|
||||||
this.mCenterX = width / 2;
|
this.mCenterX = width / 2;
|
||||||
this.mCenterY = height / 2;
|
this.mCenterY = height / 2;
|
||||||
|
|
||||||
let writePromise;
|
let bufferData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
|
await data.readPixelsToBuffer(bufferData);
|
||||||
|
|
||||||
|
var dataArray = new Uint8Array(bufferData);
|
||||||
|
|
||||||
for (var h = 0;h <= height; h++) {
|
for (var h = 0;h <= height; h++) {
|
||||||
for (var w = 0;w <= width; w++) {
|
for (var w = 0;w <= width; w++) {
|
||||||
if (this.isContainsCircle(w, h)) {
|
if (this.isContainsCircle(w, h)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
//针对的点
|
||||||
var buffer1 = new ArrayBuffer(5);
|
let index = (h * width + w) * 4;
|
||||||
var bytes1 = new Uint8Array(buffer1);
|
dataArray[index] = 0;
|
||||||
var writePositionRenB = {
|
dataArray[index+1] = 0;
|
||||||
pixels: buffer1,
|
dataArray[index+2] = 0;
|
||||||
offset: 1,
|
dataArray[index+3] = 0;
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let j = 0;j < 5; j++) {
|
|
||||||
bytes1[j] = 0;
|
|
||||||
}
|
|
||||||
this.mTransform_pixelMap.writePixels(writePositionRenB, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
await data.writeBufferToPixels(bufferData);
|
||||||
if (func) {
|
if (func) {
|
||||||
func("", this.mTransform_pixelMap);
|
func("", data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,16 +13,15 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
export class CropCircleWithBorderTransformation implements BaseTransform<PixelMap> {
|
export class CropCircleWithBorderTransformation implements BaseTransform<PixelMap> {
|
||||||
private static TAG: string= "CropCircleTransformation";
|
private static TAG: string= "CropCircleTransformation";
|
||||||
private mTransform_pixelMap: any;
|
|
||||||
private mBorderSize: number= 5;
|
private mBorderSize: number= 5;
|
||||||
private mCenterX: number= 0;
|
private mCenterX: number= 0;
|
||||||
private mCenterY: number= 0;
|
private mCenterY: number= 0;
|
||||||
|
@ -104,8 +103,7 @@ export class CropCircleWithBorderTransformation implements BaseTransform<PixelMa
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private async transformPixelMap(pixelMap: PixelMap, width: number, height: number, func?: AsyncTransform<PixelMap>) {
|
private async transformPixelMap(pixelMap: any, width: number, height: number, func?: AsyncTransform<PixelMap>) {
|
||||||
this.mTransform_pixelMap = pixelMap;
|
|
||||||
this.mRadius = 0;
|
this.mRadius = 0;
|
||||||
if (width > height) {
|
if (width > height) {
|
||||||
this.mRadius = height / 2;
|
this.mRadius = height / 2;
|
||||||
|
@ -114,8 +112,13 @@ export class CropCircleWithBorderTransformation implements BaseTransform<PixelMa
|
||||||
}
|
}
|
||||||
this.mCenterX = width / 2;
|
this.mCenterX = width / 2;
|
||||||
this.mCenterY = height / 2;
|
this.mCenterY = height / 2;
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
|
let bufferData = new ArrayBuffer(pixelMap.getPixelBytesNumber());
|
||||||
|
await pixelMap.readPixelsToBuffer(bufferData);
|
||||||
|
|
||||||
|
var dataArray = new Uint8Array(bufferData);
|
||||||
|
|
||||||
for (let h = 0;h <= height; h++) {
|
for (let h = 0;h <= height; h++) {
|
||||||
for (let w = 0;w <= width; w++) {
|
for (let w = 0;w <= width; w++) {
|
||||||
//不在大圆之内的设置透明
|
//不在大圆之内的设置透明
|
||||||
|
@ -127,80 +130,25 @@ export class CropCircleWithBorderTransformation implements BaseTransform<PixelMa
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let index = (h * width + w) * 4;
|
||||||
if (!isBigCircle) {
|
if (!isBigCircle) {
|
||||||
//设置透明
|
//设置透明
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
dataArray[index] = 0;
|
||||||
var buffer1B = new ArrayBuffer(5);
|
dataArray[index+1] = 0;
|
||||||
var bytes1B = new Uint8Array(buffer1B);
|
dataArray[index+2] = 0;
|
||||||
var writePositionRenB = {
|
dataArray[index+3] = 0;
|
||||||
pixels: buffer1B,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let j = 0;j < 5; j++) {
|
|
||||||
bytes1B[j] = 0;
|
|
||||||
}
|
|
||||||
this.mTransform_pixelMap.writePixels(writePositionRenB, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
} else {
|
} else {
|
||||||
//设置broke
|
//设置broke
|
||||||
var buffer = new ArrayBuffer(5);
|
dataArray[index] = this.mRColor;
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
dataArray[index+1] = this.mGColor;
|
||||||
var positionRen = {
|
dataArray[index+2] = this.mBColor;
|
||||||
pixels: buffer,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.mTransform_pixelMap.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
|
||||||
var bytes = new Uint8Array(buffer);
|
|
||||||
var buffer1 = new ArrayBuffer(5);
|
|
||||||
var bytes1 = new Uint8Array(buffer1);
|
|
||||||
var writePositionRen = {
|
|
||||||
pixels: buffer1,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let j = 0;j < 5; j++) {
|
|
||||||
if (j == 1 && this.mBColor > 0) {
|
|
||||||
bytes1[j] = this.mBColor;
|
|
||||||
} else if (j == 2 && this.mGColor > 0) {
|
|
||||||
bytes1[j] = this.mGColor;
|
|
||||||
} else if (j == 3 && this.mRColor > 0) {
|
|
||||||
bytes1[j] = this.mRColor;
|
|
||||||
} else {
|
|
||||||
bytes1[j] = bytes[j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.mTransform_pixelMap.writePixels(writePositionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await pixelMap.writeBufferToPixels(bufferData);
|
||||||
if (func) {
|
if (func) {
|
||||||
func("", this.mTransform_pixelMap);
|
func("", pixelMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
|
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
|
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
export class GrayscaleTransformation implements BaseTransform<PixelMap> {
|
export class GrayscaleTransformation implements BaseTransform<PixelMap> {
|
||||||
|
@ -25,7 +25,6 @@ export class GrayscaleTransformation implements BaseTransform<PixelMap> {
|
||||||
return "GrayscaleTransformation:" + this;
|
return "GrayscaleTransformation:" + this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform<PixelMap>) {
|
async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform<PixelMap>) {
|
||||||
if (!buf || buf.byteLength <= 0) {
|
if (!buf || buf.byteLength <= 0) {
|
||||||
console.log(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty");
|
console.log(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty");
|
||||||
|
@ -65,54 +64,31 @@ export class GrayscaleTransformation implements BaseTransform<PixelMap> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let data = await imageSource.createPixelMap(options);
|
let data = await imageSource.createPixelMap(options);
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
for (let w = 0;w <= targetWidth; w++) {
|
|
||||||
for (let h = 0;h <= targetHeight; h++) {
|
|
||||||
var buffer = new ArrayBuffer(5);
|
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
|
||||||
var positionRen = {
|
|
||||||
pixels: buffer,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
|
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
let bufferData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
var bytes = new Uint8Array(buffer);
|
let bufferNewData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
var buffer1B = new ArrayBuffer(5);
|
await data.readPixelsToBuffer(bufferData);
|
||||||
var bytes1B = new Uint8Array(buffer1B);
|
|
||||||
var writePositionRenB = {
|
var dataArray = new Uint8Array(bufferData);
|
||||||
pixels: buffer1B,
|
var dataNewArray = new Uint8Array(bufferNewData);
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
for (let index = 0; index < dataArray.length; index += 4) {
|
||||||
region: { size: { width: 1, height: 1 },
|
const r = dataArray[index];
|
||||||
x: w,
|
const g = dataArray[index+1];
|
||||||
y: h
|
const b = dataArray[index+2];
|
||||||
}
|
const f = dataArray[index+3];
|
||||||
}
|
//b g r
|
||||||
bytes1B[0] = bytes[0];
|
dataNewArray[index] = this.grayscale(r, g, b);
|
||||||
bytes1B[1] = this.grayscale(bytes[3], bytes[2], bytes[1]);
|
dataNewArray[index+1] = this.grayscale(r, g, b);
|
||||||
bytes1B[2] = this.grayscale(bytes[3], bytes[2], bytes[1]);
|
dataNewArray[index+2] = this.grayscale(r, g, b);
|
||||||
bytes1B[3] = this.grayscale(bytes[3], bytes[2], bytes[1]);
|
dataNewArray[index+3] = f;
|
||||||
bytes1B[4] = bytes[4];
|
|
||||||
data.writePixels(writePositionRenB, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await data.writeBufferToPixels(bufferNewData);
|
||||||
|
if (func) {
|
||||||
func('', data);
|
func('', data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将读取的像素点的rgb值,全部灰度化,得到灰度图片(黑白图片)加权平均法
|
* 将读取的像素点的rgb值,全部灰度化,得到灰度图片(黑白图片)加权平均法
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,55 +73,21 @@ export class InvertFilterTransformation implements BaseTransform<PixelMap> {
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = await imageSource.createPixelMap(options);
|
let data = await imageSource.createPixelMap(options);
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
|
|
||||||
for (let w = 0;w <= targetWidth; w++) {
|
let bufferData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
for (let h = 0;h <= targetHeight; h++) {
|
await data.readPixelsToBuffer(bufferData);
|
||||||
var buffer = new ArrayBuffer(5);
|
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
|
||||||
var positionRen = {
|
|
||||||
pixels: buffer,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
|
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
var dataArray = new Uint8Array(bufferData);
|
||||||
var bytes = new Uint8Array(buffer);
|
|
||||||
|
|
||||||
var buffer1B = new ArrayBuffer(5);
|
for (let index = 0; index < dataArray.length; index += 4) {
|
||||||
var bytes1B = new Uint8Array(buffer1B);
|
dataArray[index] = this.checkVisAble(255 - dataArray[index]);
|
||||||
var writePositionRenB = {
|
dataArray[index+1] = this.checkVisAble(255 - dataArray[index+1]);
|
||||||
pixels: buffer1B,
|
dataArray[index+2] = this.checkVisAble(255 - dataArray[index+2]);
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
}
|
||||||
|
await data.writeBufferToPixels(bufferData);
|
||||||
|
if (func) {
|
||||||
|
func('', data);
|
||||||
}
|
}
|
||||||
bytes1B[0] = bytes[0];
|
|
||||||
bytes1B[1] = this.checkVisAble(255 - bytes[1]);
|
|
||||||
bytes1B[2] = this.checkVisAble(255 - bytes[2]);
|
|
||||||
bytes1B[3] = this.checkVisAble(255 - bytes[3]);
|
|
||||||
bytes1B[4] = bytes[4];
|
|
||||||
data.writePixels(writePositionRenB, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func("", data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private checkVisAble(input: number) {
|
private checkVisAble(input: number) {
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 Huawei Device Co., Ltd.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
|
import {Constants} from "../constants/Constants.ets"
|
||||||
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
|
import {MaskUtils} from "../utils/MaskUtils.ets"
|
||||||
|
import image from "@ohos.multimedia.image"
|
||||||
|
import resmgr from "@ohos.resourceManager"
|
||||||
|
|
||||||
|
export class MaskTransformation implements BaseTransform<PixelMap> {
|
||||||
|
private _mResourceData: Resource;
|
||||||
|
|
||||||
|
constructor(maskBitmap: Resource) {
|
||||||
|
this._mResourceData = maskBitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
getName() {
|
||||||
|
return "MaskTransformation:" + this._mResourceData;
|
||||||
|
}
|
||||||
|
|
||||||
|
async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform<PixelMap>) {
|
||||||
|
if (!buf || buf.byteLength <= 0) {
|
||||||
|
console.log(Constants.PROJECT_TAG + ";MaskTransformation buf is empty");
|
||||||
|
if (func) {
|
||||||
|
func(Constants.PROJECT_TAG + ";MaskTransformation buf is empty", null);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var imageSource = image.createImageSource(buf as any);
|
||||||
|
|
||||||
|
let imageInfo = await imageSource.getImageInfo();
|
||||||
|
let size = {
|
||||||
|
width: imageInfo.size.width,
|
||||||
|
height: imageInfo.size.height
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!size) {
|
||||||
|
func(new Error("MaskTransformation The image size does not exist."), null)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var pixelMapWidth = size.width;
|
||||||
|
var pixelMapHeight = size.height;
|
||||||
|
var targetWidth = request.size.width;
|
||||||
|
var targetHeight = request.size.height;
|
||||||
|
if (pixelMapWidth < targetWidth) {
|
||||||
|
targetWidth = pixelMapWidth;
|
||||||
|
}
|
||||||
|
if (pixelMapHeight < targetHeight) {
|
||||||
|
targetHeight = pixelMapHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
editable: true,
|
||||||
|
desiredSize: {
|
||||||
|
width: targetWidth,
|
||||||
|
height: targetHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
imageSource.createPixelMap(options)
|
||||||
|
.then(data => {
|
||||||
|
this.openInternal(data, targetWidth, targetHeight, func)
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
func(e, null);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private openInternal(bitmap: any, width: number, height: number, func: AsyncTransform<PixelMap>) {
|
||||||
|
if (!this._mResourceData) {
|
||||||
|
throw new Error("MaskTransformation resource is empty");
|
||||||
|
}
|
||||||
|
resmgr.getResourceManager()
|
||||||
|
.then(result => {
|
||||||
|
result.getMedia(this._mResourceData
|
||||||
|
.id)
|
||||||
|
.then(array => {
|
||||||
|
let buffer = array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset);
|
||||||
|
var imageSource = image.createImageSource(buffer as any);
|
||||||
|
var options = {
|
||||||
|
editable: true,
|
||||||
|
desiredSize: {
|
||||||
|
width: width,
|
||||||
|
height: height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
imageSource.createPixelMap(options)
|
||||||
|
.then(maskBitmap => {
|
||||||
|
MaskUtils.mask(bitmap, maskBitmap, func)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
func("MaskTransformation openInternal error" + err, null);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,11 +13,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
import {pixelUtils} from "../utils/PixelUtils"
|
import {pixelUtils} from "../utils/PixelUtils"
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,11 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
|
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
|
|
|
@ -12,12 +12,12 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {ArcPoint} from "../entry/ArcPoint"
|
import {ArcPoint} from "../entry/ArcPoint.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import {TransformUtils} from "../transform/TransformUtils"
|
import {TransformUtils} from "../transform/TransformUtils.ets"
|
||||||
|
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from "../transform/BaseTransform"
|
import {BaseTransform} from "../transform/BaseTransform.ets"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform.ets"
|
||||||
import {Constants} from "../constants/Constants"
|
import {Constants} from "../constants/Constants.ets"
|
||||||
import {RequestOption} from "../../glide/RequestOption"
|
import {RequestOption} from "../../glide/RequestOption.ets"
|
||||||
import image from "@ohos.multimedia.image"
|
import image from "@ohos.multimedia.image"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -69,62 +69,37 @@ export class SepiaFilterTransformation implements BaseTransform<PixelMap> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let data = await imageSource.createPixelMap(options);
|
let data = await imageSource.createPixelMap(options);
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
for (let w = 0;w <= targetWidth; w++) {
|
|
||||||
for (let h = 0;h <= targetHeight; h++) {
|
|
||||||
var buffer = new ArrayBuffer(5);
|
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
|
||||||
var positionRen = {
|
|
||||||
pixels: buffer,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
|
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
let bufferData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
var bytes = new Uint8Array(buffer);
|
let bufferNewData = new ArrayBuffer(data.getPixelBytesNumber());
|
||||||
var buffer1B = new ArrayBuffer(5);
|
await data.readPixelsToBuffer(bufferData);
|
||||||
var bytes1B = new Uint8Array(buffer1B);
|
|
||||||
|
|
||||||
var writePositionRenB = {
|
var dataArray = new Uint8Array(bufferData);
|
||||||
pixels: buffer1B,
|
var dataNewArray = new Uint8Array(bufferNewData);
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bytes1B[0] = bytes[0];
|
|
||||||
bytes1B[1] = this.checkVisAble(this.colorBlend(this.noise()
|
|
||||||
, (bytes[3] * 0.272) + (bytes[2] * 0.534) + (bytes[1] * 0.131)
|
|
||||||
, bytes[1]));
|
|
||||||
bytes1B[2] = this.checkVisAble(this.colorBlend(this.noise()
|
|
||||||
, (bytes[3] * 0.349) + (bytes[2] * 0.686) + (bytes[1] * 0.168)
|
|
||||||
, bytes[2]));
|
|
||||||
bytes1B[3] = this.checkVisAble(this.colorBlend(this.noise()
|
|
||||||
, (bytes[3] * 0.393) + (bytes[2] * 0.769) + (bytes[1] * 0.189)
|
|
||||||
, bytes[3]));
|
|
||||||
bytes1B[4] = bytes[4];
|
|
||||||
|
|
||||||
data.writePixels(writePositionRenB, () => {
|
for (let index = 0; index < dataArray.length; index += 4) {
|
||||||
resolve();
|
const r = dataArray[index];
|
||||||
});
|
const g = dataArray[index+1];
|
||||||
})
|
const b = dataArray[index+2];
|
||||||
await writePromise;
|
const f = dataArray[index+3];
|
||||||
}
|
|
||||||
|
dataNewArray[index+2] = this.checkVisAble(this.colorBlend(this.noise()
|
||||||
|
, (r * 0.272) + (g * 0.534) + (b * 0.131)
|
||||||
|
, b));
|
||||||
|
dataNewArray[index+1] = this.checkVisAble(this.colorBlend(this.noise()
|
||||||
|
, (r * 0.349) + (g * 0.686) + (b * 0.168)
|
||||||
|
, g));
|
||||||
|
dataNewArray[index] = this.checkVisAble(this.colorBlend(this.noise()
|
||||||
|
, (r * 0.393) + (g * 0.769) + (b * 0.189)
|
||||||
|
, r));
|
||||||
|
dataNewArray[index+3] = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await data.writeBufferToPixels(bufferNewData);
|
||||||
|
if (func) {
|
||||||
func("", data);
|
func("", data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private checkVisAble(input: number) {
|
private checkVisAble(input: number) {
|
||||||
if (input > 255) {
|
if (input > 255) {
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseTransform} from '../transform/BaseTransform'
|
import {BaseTransform} from '../transform/BaseTransform.ets'
|
||||||
import {AsyncTransform} from '../transform/AsyncTransform'
|
import {AsyncTransform} from '../transform/AsyncTransform.ets'
|
||||||
import {Constants} from '../constants/Constants'
|
import {Constants} from '../constants/Constants.ets'
|
||||||
import {RequestOption} from '../../glide/RequestOption'
|
import {RequestOption} from '../../glide/RequestOption.ets'
|
||||||
import {TransformUtils} from '../transform/TransformUtils'
|
import {TransformUtils} from '../transform/TransformUtils.ets'
|
||||||
import image from '@ohos.multimedia.image'
|
import image from '@ohos.multimedia.image'
|
||||||
import {CalculatePixelUtils} from '../utils/CalculatePixelUtils'
|
import {CalculatePixelUtils} from '../utils/CalculatePixelUtils'
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,182 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 Huawei Device Co., Ltd.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the 'License');
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an 'AS IS' BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {BaseTransform} from '../transform/BaseTransform.ets'
|
||||||
|
import {AsyncTransform} from '../transform/AsyncTransform.ets'
|
||||||
|
import {Constants} from '../constants/Constants.ets'
|
||||||
|
import {RequestOption} from '../../glide/RequestOption.ets'
|
||||||
|
import {TransformUtils} from '../transform/TransformUtils.ets'
|
||||||
|
import image from '@ohos.multimedia.image'
|
||||||
|
import {PixelEntry} from '../entry/PixelEntry'
|
||||||
|
import {ColorUtils} from '../utils/ColorUtils'
|
||||||
|
import {CalculatePixelUtils} from '../utils/CalculatePixelUtils'
|
||||||
|
|
||||||
|
export class SwirlFilterTransformation implements BaseTransform<PixelMap> {
|
||||||
|
private _degree: number;
|
||||||
|
|
||||||
|
constructor(degree: number) {
|
||||||
|
this._degree = degree;
|
||||||
|
}
|
||||||
|
|
||||||
|
getName() {
|
||||||
|
return 'SwirlFilterTransformation' + this._degree;
|
||||||
|
}
|
||||||
|
|
||||||
|
transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform<PixelMap>) {
|
||||||
|
if (!buf || buf.byteLength <= 0) {
|
||||||
|
throw new Error(Constants.PROJECT_TAG + ';SwirlFilterTransformation buf is empty');
|
||||||
|
if (func) {
|
||||||
|
func(Constants.PROJECT_TAG + ';SwirlFilterTransformation buf is empty', null);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var imageSource = image.createImageSource(buf as any);
|
||||||
|
TransformUtils.getPixelMapSize(imageSource, (error, size: {
|
||||||
|
width: number,
|
||||||
|
height: number
|
||||||
|
}) => {
|
||||||
|
if (!size) {
|
||||||
|
func(error, null)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var pixelMapWidth = size.width;
|
||||||
|
var pixelMapHeight = size.height;
|
||||||
|
var targetWidth = request.size.width;
|
||||||
|
var targetHeight = request.size.height;
|
||||||
|
if (pixelMapWidth < targetWidth) {
|
||||||
|
targetWidth = pixelMapWidth;
|
||||||
|
}
|
||||||
|
if (pixelMapHeight < targetHeight) {
|
||||||
|
targetHeight = pixelMapHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
editable: true,
|
||||||
|
desiredSize: {
|
||||||
|
width: targetWidth,
|
||||||
|
height: targetHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
imageSource.createPixelMap(options)
|
||||||
|
.then((data) => {
|
||||||
|
this.swirl(data, this._degree, func);
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
func(e, null);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private async swirl(bitmap: any, degree: number, func?: AsyncTransform<PixelMap>) {
|
||||||
|
let imageInfo = await bitmap.getImageInfo();
|
||||||
|
let size = {
|
||||||
|
width: imageInfo.size.width,
|
||||||
|
height: imageInfo.size.height
|
||||||
|
}
|
||||||
|
if (!size) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let width = size.width;
|
||||||
|
let height = size.height;
|
||||||
|
let pixEntry: Array<PixelEntry> = new Array();
|
||||||
|
|
||||||
|
|
||||||
|
let rgbData = CalculatePixelUtils.createInt2DArray(height, width);
|
||||||
|
|
||||||
|
let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber());
|
||||||
|
await bitmap.readPixelsToBuffer(bufferData);
|
||||||
|
let dataArray = new Uint8Array(bufferData);
|
||||||
|
|
||||||
|
let ph = 0;
|
||||||
|
let pw = 0;
|
||||||
|
for (let index = 0; index < dataArray.length; index += 4) {
|
||||||
|
const r = dataArray[index];
|
||||||
|
const g = dataArray[index+1];
|
||||||
|
const b = dataArray[index+2];
|
||||||
|
const f = dataArray[index+3];
|
||||||
|
|
||||||
|
let entry = new PixelEntry();
|
||||||
|
entry.a = 0;
|
||||||
|
entry.b = b;
|
||||||
|
entry.g = g;
|
||||||
|
entry.r = r;
|
||||||
|
entry.f = f;
|
||||||
|
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
|
pixEntry.push(entry);
|
||||||
|
rgbData[ph][pw] = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
|
if (pw == width - 1) {
|
||||||
|
pw = 0;
|
||||||
|
ph++;
|
||||||
|
} else {
|
||||||
|
pw++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let k = degree / 3600;
|
||||||
|
let cenX = width / 2;
|
||||||
|
let cenY = height / 2;
|
||||||
|
|
||||||
|
let radius = 0;
|
||||||
|
for (let h = 0;h < height; h++) {
|
||||||
|
for (let w = 0; w < width; w++) {
|
||||||
|
|
||||||
|
let offerX = w - cenX;
|
||||||
|
let offerY = h - cenY;
|
||||||
|
let radian = Math.atan2(offerY, offerX)
|
||||||
|
radius = Math.floor(Math.sqrt(offerX * offerX + offerY * offerY));
|
||||||
|
|
||||||
|
let newX = Math.floor(radius * Math.cos(radian + k * radius)) + cenX;
|
||||||
|
let newY = Math.floor(radius * Math.sin(radian + k * radius)) + cenY;
|
||||||
|
|
||||||
|
newX = Math.floor(Math.min(width - 1, Math.max(0, newX)));
|
||||||
|
newY = Math.floor(Math.min(height - 1, Math.max(0, newY)));
|
||||||
|
|
||||||
|
rgbData[h][w] = rgbData[newY][newX];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let bufferNewData = new ArrayBuffer(bitmap.getPixelBytesNumber());
|
||||||
|
let dataNewArray = new Uint8Array(bufferNewData);
|
||||||
|
let index = 0;
|
||||||
|
let mh = 0;
|
||||||
|
let nw = 0;
|
||||||
|
|
||||||
|
for (let i = 0; i < dataNewArray.length; i += 4) {
|
||||||
|
let pixel_1 = rgbData[mh][nw];
|
||||||
|
|
||||||
|
if (nw == width - 1) {
|
||||||
|
nw = 0;
|
||||||
|
mh++;
|
||||||
|
} else {
|
||||||
|
nw++;
|
||||||
|
}
|
||||||
|
|
||||||
|
let p_r = ColorUtils.red(pixel_1);
|
||||||
|
let p_g = ColorUtils.green(pixel_1);
|
||||||
|
let p_b = ColorUtils.blue(pixel_1);
|
||||||
|
|
||||||
|
dataNewArray[i] = p_r;
|
||||||
|
dataNewArray[i+1] = p_g;
|
||||||
|
dataNewArray[i+2] = p_b;
|
||||||
|
dataNewArray[i+3] = pixEntry[index].f;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
await bitmap.writeBufferToPixels(bufferNewData);
|
||||||
|
if (func) {
|
||||||
|
func("", bitmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,41 +20,29 @@ export namespace CalculatePixelUtils {
|
||||||
var pixEntry: Array<PixelEntry> = new Array()
|
var pixEntry: Array<PixelEntry> = new Array()
|
||||||
var pixSrc: Array<number> = new Array()
|
var pixSrc: Array<number> = new Array()
|
||||||
var pixNvt: Array<number> = new Array()
|
var pixNvt: Array<number> = new Array()
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
|
|
||||||
for (let h = 0; h < height; h++) {
|
let bufferData = new ArrayBuffer(p.getPixelBytesNumber());
|
||||||
for (let w = 0; w < width; w++) {
|
await p.readPixelsToBuffer(bufferData);
|
||||||
let buffer = new ArrayBuffer(5);
|
let dataArray = new Uint8Array(bufferData);
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
|
||||||
var positionRen = {
|
for (let index = 0; index < dataArray.length; index++) {
|
||||||
pixels: buffer,
|
const r = dataArray[index];
|
||||||
offset: 1,
|
const g = dataArray[index+1];
|
||||||
stride: 1024,
|
const b = dataArray[index+2];
|
||||||
region: { size: { width: 1, height: 1 },
|
const f = dataArray[index+3];
|
||||||
x: w,
|
|
||||||
y: h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
|
|
||||||
let bytes = new Uint8Array(buffer);
|
|
||||||
let entry = new PixelEntry();
|
let entry = new PixelEntry();
|
||||||
entry.a = bytes[0];
|
entry.a = 0;
|
||||||
entry.b = bytes[1];
|
entry.b = b;
|
||||||
entry.g = bytes[2];
|
entry.g = g;
|
||||||
entry.r = bytes[3];
|
entry.r = r;
|
||||||
entry.f = bytes[4];
|
entry.f = f;
|
||||||
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
pixEntry.push(entry);
|
pixEntry.push(entry);
|
||||||
pixSrc.push(ColorUtils.rgb(entry.r, entry.g, entry.b));
|
pixSrc.push(ColorUtils.rgb(entry.r, entry.g, entry.b));
|
||||||
pixNvt.push(0);
|
pixNvt.push(0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for (row = 0; row < height; row++) {
|
for (row = 0; row < height; row++) {
|
||||||
for (col = 0; col < width; col++) {
|
for (col = 0; col < width; col++) {
|
||||||
pos = row * width + col;
|
pos = row * width + col;
|
||||||
|
@ -74,36 +62,23 @@ export namespace CalculatePixelUtils {
|
||||||
pixSrc[pos] = ColorUtils.rgb(clr, clr, clr);
|
pixSrc[pos] = ColorUtils.rgb(clr, clr, clr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let m = 0;m < height; m++) { //y
|
|
||||||
for (let n = 0;n < width; n++) { //x
|
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
|
||||||
let buffer1B = new ArrayBuffer(5);
|
|
||||||
let bytes1B = new Uint8Array(buffer1B);
|
|
||||||
var writePositionRenB = {
|
|
||||||
pixels: buffer1B,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: n,
|
|
||||||
y: m
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let index = m * width + n;
|
let bufferNewData = new ArrayBuffer(p.getPixelBytesNumber());
|
||||||
bytes1B[0] = pixEntry[m * width + n].a;
|
let dataNewArray = new Uint8Array(bufferNewData);
|
||||||
bytes1B[1] = ColorUtils.blue(pixSrc[index]);
|
let index = 0;
|
||||||
bytes1B[2] = ColorUtils.green(pixSrc[index]);
|
|
||||||
bytes1B[3] = ColorUtils.red(pixSrc[index]);
|
for (let i = 0; i < dataNewArray.length; i += 4) {
|
||||||
bytes1B[4] = pixEntry[m * width + n].f;
|
dataNewArray[i] = ColorUtils.red(pixSrc[index]);
|
||||||
p.writePixels(writePositionRenB, () => {
|
dataNewArray[i+1] = ColorUtils.green(pixSrc[index]);
|
||||||
resolve();
|
dataNewArray[i+2] = ColorUtils.blue(pixSrc[index]);
|
||||||
});
|
dataNewArray[i+3] = pixEntry[index].f;
|
||||||
})
|
index++;
|
||||||
await writePromise;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
await p.writeBufferToPixels(bufferNewData);
|
||||||
|
|
||||||
|
if (func) {
|
||||||
func("success", p);
|
func("success", p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function gaussGray(psrc: Array<number>, horz: number, vert: number,
|
function gaussGray(psrc: Array<number>, horz: number, vert: number,
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import image from "@ohos.multimedia.image"
|
|
||||||
import {CalculatePixelUtils} from "./CalculatePixelUtils"
|
import {CalculatePixelUtils} from "./CalculatePixelUtils"
|
||||||
import {PixelEntry} from "../entry/PixelEntry"
|
import {PixelEntry} from "../entry/PixelEntry"
|
||||||
import {AsyncTransform} from "../transform/AsyncTransform"
|
import {AsyncTransform} from "../transform/AsyncTransform"
|
||||||
|
@ -73,41 +72,27 @@ export namespace fastBlur {
|
||||||
var pixEntry: Array<PixelEntry> = new Array()
|
var pixEntry: Array<PixelEntry> = new Array()
|
||||||
var pix: Array<number> = new Array()
|
var pix: Array<number> = new Array()
|
||||||
|
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
|
||||||
|
|
||||||
for (let ph = 0; ph < h; ph++) {
|
let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber());
|
||||||
for (let pw = 0; pw < w; pw++) {
|
await bitmap.readPixelsToBuffer(bufferData);
|
||||||
let buffer = new ArrayBuffer(5);
|
let dataArray = new Uint8Array(bufferData);
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
|
||||||
var positionRen = {
|
for (let index = 0; index < dataArray.length; index++) {
|
||||||
pixels: buffer,
|
const r = dataArray[index];
|
||||||
offset: 1,
|
const g = dataArray[index+1];
|
||||||
stride: 1024,
|
const b = dataArray[index+2];
|
||||||
region: { size: { width: 1, height: 1 },
|
const f = dataArray[index+3];
|
||||||
x: pw,
|
|
||||||
y: ph
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bitmap.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
|
|
||||||
let bytes = new Uint8Array(buffer);
|
|
||||||
let entry = new PixelEntry();
|
let entry = new PixelEntry();
|
||||||
entry.a = bytes[0];
|
entry.a = 0;
|
||||||
entry.b = bytes[1];
|
entry.b = b;
|
||||||
entry.g = bytes[2];
|
entry.g = g;
|
||||||
entry.r = bytes[3];
|
entry.r = r;
|
||||||
entry.f = bytes[4];
|
entry.f = f;
|
||||||
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
pixEntry.push(entry);
|
pixEntry.push(entry);
|
||||||
pix.push(ColorUtils.rgb(entry.r, entry.g, entry.b));
|
pix.push(ColorUtils.rgb(entry.r, entry.g, entry.b));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
let wm = w - 1;
|
let wm = w - 1;
|
||||||
let hm = h - 1;
|
let hm = h - 1;
|
||||||
|
@ -288,33 +273,21 @@ export namespace fastBlur {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let m = 0;m < h; m++) { //y
|
|
||||||
for (let n = 0;n < w; n++) { //x
|
let bufferNewData = new ArrayBuffer(bitmap.getPixelBytesNumber());
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
let dataNewArray = new Uint8Array(bufferNewData);
|
||||||
let buffer1B = new ArrayBuffer(5);
|
let index = 0;
|
||||||
let bytes1B = new Uint8Array(buffer1B);
|
|
||||||
var writePositionRenB = {
|
for (let i = 0; i < dataNewArray.length; i += 4) {
|
||||||
pixels: buffer1B,
|
dataNewArray[i] = ColorUtils.red(pix[index]);
|
||||||
offset: 1,
|
dataNewArray[i+1] = ColorUtils.green(pix[index]);
|
||||||
stride: 1024,
|
dataNewArray[i+2] = ColorUtils.blue(pix[index]);
|
||||||
region: { size: { width: 1, height: 1 },
|
dataNewArray[i+3] = pixEntry[index].f;
|
||||||
x: n,
|
index++;
|
||||||
y: m
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let index = m * w + n;
|
|
||||||
bytes1B[0] = pixEntry[m * w + n].a;
|
|
||||||
bytes1B[1] = ColorUtils.blue(pix[index]);
|
|
||||||
bytes1B[2] = ColorUtils.green(pix[index]);
|
|
||||||
bytes1B[3] = ColorUtils.red(pix[index]);
|
|
||||||
bytes1B[4] = pixEntry[m * w + n].f;
|
|
||||||
bitmap.writePixels(writePositionRenB, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
await bitmap.writeBufferToPixels(bufferNewData);
|
||||||
|
if (func) {
|
||||||
func("success", bitmap);
|
func("success", bitmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
import {PixelEntry} from "../entry/PixelEntry"
|
||||||
|
import {AsyncTransform} from "../transform/AsyncTransform"
|
||||||
|
import {ColorUtils} from "./ColorUtils"
|
||||||
|
import {CalculatePixelUtils} from "./CalculatePixelUtils"
|
||||||
|
|
||||||
|
export class MaskUtils {
|
||||||
|
static async mask(bitmap: any, maskBitmap: any, func?: AsyncTransform<PixelMap>) {
|
||||||
|
let imageInfo = await bitmap.getImageInfo();
|
||||||
|
let size = {
|
||||||
|
width: imageInfo.size.width,
|
||||||
|
height: imageInfo.size.height
|
||||||
|
}
|
||||||
|
if (!size) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let width = size.width;
|
||||||
|
let height = size.height;
|
||||||
|
|
||||||
|
let rgbData = CalculatePixelUtils.createInt2DArray(height, width);
|
||||||
|
|
||||||
|
let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber());
|
||||||
|
await bitmap.readPixelsToBuffer(bufferData);
|
||||||
|
let dataArray = new Uint8Array(bufferData);
|
||||||
|
|
||||||
|
let ph = 0;
|
||||||
|
let pw = 0;
|
||||||
|
for (let index = 0; index < dataArray.length; index += 4) {
|
||||||
|
const r = dataArray[index];
|
||||||
|
const g = dataArray[index+1];
|
||||||
|
const b = dataArray[index+2];
|
||||||
|
const f = dataArray[index+3];
|
||||||
|
|
||||||
|
let entry = new PixelEntry();
|
||||||
|
entry.a = 0;
|
||||||
|
entry.b = b;
|
||||||
|
entry.g = g;
|
||||||
|
entry.r = r;
|
||||||
|
entry.f = f;
|
||||||
|
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
|
rgbData[ph][pw] = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
|
if (pw == width - 1) {
|
||||||
|
pw = 0;
|
||||||
|
ph++;
|
||||||
|
} else {
|
||||||
|
pw++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let imageInfoMask = await maskBitmap.getImageInfo();
|
||||||
|
let sizeMask = {
|
||||||
|
width: imageInfoMask.size.width,
|
||||||
|
height: imageInfoMask.size.height
|
||||||
|
}
|
||||||
|
if (!sizeMask) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let widthMask = sizeMask.width;
|
||||||
|
let heightMask = sizeMask.height;
|
||||||
|
let rgbDataMask = CalculatePixelUtils.createInt2DArray(heightMask, widthMask);
|
||||||
|
let pixEntry: Array<PixelEntry> = new Array();
|
||||||
|
|
||||||
|
let bufferData_m = new ArrayBuffer(maskBitmap.getPixelBytesNumber());
|
||||||
|
await maskBitmap.readPixelsToBuffer(bufferData_m);
|
||||||
|
let dataArray_m = new Uint8Array(bufferData_m);
|
||||||
|
|
||||||
|
let ph_m = 0;
|
||||||
|
let pw_m = 0;
|
||||||
|
|
||||||
|
for (let index = 0; index < dataArray_m.length; index += 4) {
|
||||||
|
const r = bufferData_m[index];
|
||||||
|
const g = bufferData_m[index+1];
|
||||||
|
const b = bufferData_m[index+2];
|
||||||
|
const f = bufferData_m[index+3];
|
||||||
|
|
||||||
|
let entry = new PixelEntry();
|
||||||
|
entry.a = 0;
|
||||||
|
entry.b = b;
|
||||||
|
entry.g = g;
|
||||||
|
entry.r = r;
|
||||||
|
entry.f = f;
|
||||||
|
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
|
pixEntry.push(entry);
|
||||||
|
if (entry.r == 0 && entry.g == 0 && entry.r == b) {
|
||||||
|
rgbDataMask[ph_m][pw_m] = rgbData[ph_m][pw_m];
|
||||||
|
} else {
|
||||||
|
rgbDataMask[ph_m][pw_m] = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pw_m == widthMask - 1) {
|
||||||
|
pw_m = 0;
|
||||||
|
ph_m++;
|
||||||
|
} else {
|
||||||
|
pw_m++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let bufferNewData = new ArrayBuffer(maskBitmap.getPixelBytesNumber());
|
||||||
|
let dataNewArray = new Uint8Array(bufferNewData);
|
||||||
|
let index = 0;
|
||||||
|
let mh = 0;
|
||||||
|
let nw = 0;
|
||||||
|
|
||||||
|
for (let i = 0; i < dataNewArray.length; i += 4) {
|
||||||
|
let pixel_1 = rgbDataMask[mh][nw];
|
||||||
|
|
||||||
|
if (nw == widthMask - 1) {
|
||||||
|
nw = 0;
|
||||||
|
mh++;
|
||||||
|
} else {
|
||||||
|
nw++;
|
||||||
|
}
|
||||||
|
|
||||||
|
let p_r = ColorUtils.red(pixel_1);
|
||||||
|
let p_g = ColorUtils.green(pixel_1);
|
||||||
|
let p_b = ColorUtils.blue(pixel_1);
|
||||||
|
|
||||||
|
dataNewArray[i] = p_r;
|
||||||
|
dataNewArray[i+1] = p_g;
|
||||||
|
dataNewArray[i+2] = p_b;
|
||||||
|
dataNewArray[i+3] = pixEntry[index].f;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
await maskBitmap.writeBufferToPixels(bufferNewData);
|
||||||
|
if (func) {
|
||||||
|
func("", maskBitmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,39 +36,38 @@ export namespace pixelUtils {
|
||||||
|
|
||||||
var pixEntry: Array<PixelEntry> = new Array()
|
var pixEntry: Array<PixelEntry> = new Array()
|
||||||
let inPixels: Array<Array<number>> = CalculatePixelUtils.createInt2DArray(targetHeight, targetWidth);
|
let inPixels: Array<Array<number>> = CalculatePixelUtils.createInt2DArray(targetHeight, targetWidth);
|
||||||
let readPromise;
|
|
||||||
let writePromise;
|
let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber());
|
||||||
//读取
|
await bitmap.readPixelsToBuffer(bufferData);
|
||||||
for (let ph = 0; ph < targetHeight; ph++) {
|
let dataArray = new Uint8Array(bufferData);
|
||||||
for (let pw = 0; pw < targetWidth; pw++) {
|
|
||||||
let buffer = new ArrayBuffer(5);
|
let ph = 0;
|
||||||
readPromise = new Promise<void>((resolve, reject) => {
|
let pw = 0;
|
||||||
var positionRen = {
|
|
||||||
pixels: buffer,
|
|
||||||
offset: 1,
|
for (let index = 0; index < dataArray.length; index++) {
|
||||||
stride: 1024,
|
const r = dataArray[index];
|
||||||
region: { size: { width: 1, height: 1 },
|
const g = dataArray[index+1];
|
||||||
x: pw,
|
const b = dataArray[index+2];
|
||||||
y: ph
|
const f = dataArray[index+3];
|
||||||
}
|
|
||||||
}
|
|
||||||
bitmap.readPixels(positionRen, () => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
await readPromise;
|
|
||||||
let bytes = new Uint8Array(buffer);
|
|
||||||
let entry = new PixelEntry();
|
let entry = new PixelEntry();
|
||||||
entry.a = bytes[0];
|
entry.a = 0;
|
||||||
entry.b = bytes[1];
|
entry.b = b;
|
||||||
entry.g = bytes[2];
|
entry.g = g;
|
||||||
entry.r = bytes[3];
|
entry.r = r;
|
||||||
entry.f = bytes[4];
|
entry.f = f;
|
||||||
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
entry.pixel = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
pixEntry.push(entry);
|
pixEntry.push(entry);
|
||||||
inPixels[ph][pw] = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
inPixels[ph][pw] = ColorUtils.rgb(entry.r, entry.g, entry.b);
|
||||||
|
if (pw == targetWidth - 1) {
|
||||||
|
pw = 0;
|
||||||
|
ph++;
|
||||||
|
} else {
|
||||||
|
pw++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var realPixel_W = pixel > targetWidth ? targetWidth : pixel;
|
var realPixel_W = pixel > targetWidth ? targetWidth : pixel;
|
||||||
var realPixel_H = pixel > targetHeight ? targetHeight : pixel;
|
var realPixel_H = pixel > targetHeight ? targetHeight : pixel;
|
||||||
|
|
||||||
|
@ -99,38 +98,35 @@ export namespace pixelUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (let m = 0;m < targetHeight; m++) { //y
|
let bufferNewData = new ArrayBuffer(bitmap.getPixelBytesNumber());
|
||||||
for (let n = 0;n < targetWidth; n++) { //x
|
let dataNewArray = new Uint8Array(bufferNewData);
|
||||||
writePromise = new Promise<void>((resolve, reject) => {
|
let index = 0;
|
||||||
let buffer1B = new ArrayBuffer(5);
|
let mh = 0;
|
||||||
let bytes1B = new Uint8Array(buffer1B);
|
let nw = 0;
|
||||||
let writePositionRenB = {
|
|
||||||
pixels: buffer1B,
|
|
||||||
offset: 1,
|
|
||||||
stride: 1024,
|
|
||||||
region: { size: { width: 1, height: 1 },
|
|
||||||
x: n,
|
|
||||||
y: m
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let index = m * targetWidth + n;
|
|
||||||
let pxix1 = inPixels[m][n];
|
|
||||||
let p_b = ColorUtils.blue(pxix1);
|
|
||||||
let p_g = ColorUtils.green(pxix1);
|
|
||||||
let p_r = ColorUtils.red(pxix1);
|
|
||||||
|
|
||||||
bytes1B[0] = pixEntry[index].a;
|
for (let i = 0; i < dataNewArray.length; i += 4) {
|
||||||
bytes1B[1] = p_b;
|
let pixel_1 = inPixels[mh][nw];
|
||||||
bytes1B[2] = p_g;
|
|
||||||
bytes1B[3] = p_r;
|
if (nw == targetWidth - 1) {
|
||||||
bytes1B[4] = pixEntry[index].f;
|
nw = 0;
|
||||||
bitmap.writePixels(writePositionRenB, () => {
|
mh++;
|
||||||
resolve();
|
} else {
|
||||||
});
|
nw++;
|
||||||
})
|
|
||||||
await writePromise;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let p_r = ColorUtils.red(pixel_1);
|
||||||
|
let p_g = ColorUtils.green(pixel_1);
|
||||||
|
let p_b = ColorUtils.blue(pixel_1);
|
||||||
|
|
||||||
|
dataNewArray[i] = p_r;
|
||||||
|
dataNewArray[i+1] = p_g;
|
||||||
|
dataNewArray[i+2] = p_b;
|
||||||
|
dataNewArray[i+3] = pixEntry[index].f;
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
|
await bitmap.writeBufferToPixels(bufferNewData);
|
||||||
|
if (func) {
|
||||||
func("success", bitmap);
|
func("success", bitmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
|
@ -12,13 +12,13 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import {RequestOption} from "../glide/RequestOption"
|
import {RequestOption} from "../glide/RequestOption.ets"
|
||||||
import {CropCircleTransformation} from "../glide/transform/CropCircleTransformation"
|
import {CropCircleTransformation} from "../glide/transform/CropCircleTransformation.ets"
|
||||||
import {RoundedCornersTransformation} from "../glide/transform/RoundedCornersTransformation"
|
import {RoundedCornersTransformation} from "../glide/transform/RoundedCornersTransformation.ets"
|
||||||
import {CropCircleWithBorderTransformation} from "../glide/transform/CropCircleWithBorderTransformation"
|
import {CropCircleWithBorderTransformation} from "../glide/transform/CropCircleWithBorderTransformation.ets"
|
||||||
import {RotateImageTransformation} from "../glide/transform/RotateImageTransformation"
|
import {RotateImageTransformation} from "../glide/transform/RotateImageTransformation.ets"
|
||||||
import {CropSquareTransformation} from "../glide/transform/CropSquareTransformation"
|
import {CropSquareTransformation} from "../glide/transform/CropSquareTransformation.ets"
|
||||||
import {CropTransformation} from "../glide/transform/CropTransformation"
|
import {CropTransformation} from "../glide/transform/CropTransformation.ets"
|
||||||
import {CropType} from "../glide/transform/CropTransformation"
|
import {CropType} from "../glide/transform/CropTransformation"
|
||||||
import {GrayscaleTransformation} from "../glide/transform/GrayscaleTransformation"
|
import {GrayscaleTransformation} from "../glide/transform/GrayscaleTransformation"
|
||||||
import {BrightnessFilterTransformation} from "../glide/transform/BrightnessFilterTransformation"
|
import {BrightnessFilterTransformation} from "../glide/transform/BrightnessFilterTransformation"
|
||||||
|
@ -28,14 +28,16 @@ import {SepiaFilterTransformation} from "../glide/transform/SepiaFilterTransform
|
||||||
import {SketchFilterTransformation} from "../glide/transform/SketchFilterTransformation"
|
import {SketchFilterTransformation} from "../glide/transform/SketchFilterTransformation"
|
||||||
import {BlurTransformation} from "../glide/transform/BlurTransformation"
|
import {BlurTransformation} from "../glide/transform/BlurTransformation"
|
||||||
import {PixelationFilterTransformation} from "../glide/transform/PixelationFilterTransformation"
|
import {PixelationFilterTransformation} from "../glide/transform/PixelationFilterTransformation"
|
||||||
import {PixelMapPack} from "../glide/PixelMapPack";
|
import {MaskTransformation} from "../glide/transform/MaskTransformation"
|
||||||
|
import {SwirlFilterTransformation} from "../glide/transform/SwirlFilterTransformation"
|
||||||
|
import {PixelMapPack} from "../glide/PixelMapPack.ets";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PixelMap transform 示例
|
* PixelMap transform 示例
|
||||||
*/
|
*/
|
||||||
let mRotate: number = 0;
|
let mRotate: number = 0;
|
||||||
//let mUrl = "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB"
|
//let mUrl = "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB"
|
||||||
let mUrl = $r('app.media.transformBase');
|
let mUrl = $r('app.media.check_big');
|
||||||
|
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
|
@ -58,6 +60,8 @@ struct TransformPixelMapPage {
|
||||||
@State mSketchPixelMap: PixelMapPack= new PixelMapPack();
|
@State mSketchPixelMap: PixelMapPack= new PixelMapPack();
|
||||||
@State mBlurPixelMap: PixelMapPack= new PixelMapPack();
|
@State mBlurPixelMap: PixelMapPack= new PixelMapPack();
|
||||||
@State mPixelPixelMap: PixelMapPack= new PixelMapPack();
|
@State mPixelPixelMap: PixelMapPack= new PixelMapPack();
|
||||||
|
@State mSwirlPixelMap: PixelMapPack= new PixelMapPack();
|
||||||
|
@State mMaskPixelMap: PixelMapPack= new PixelMapPack();
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {
|
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {
|
||||||
|
@ -165,9 +169,8 @@ struct TransformPixelMapPage {
|
||||||
this.circleTransformation();
|
this.circleTransformation();
|
||||||
});
|
});
|
||||||
Image(this.mCirclePixelMap.pixelMap)
|
Image(this.mCirclePixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.width(200)
|
||||||
.width(100)
|
.height(200)
|
||||||
.height(100)
|
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -184,9 +187,8 @@ struct TransformPixelMapPage {
|
||||||
this.circleBorderTransformation(5);
|
this.circleBorderTransformation(5);
|
||||||
});
|
});
|
||||||
Image(this.mCircleBorderPixelMap.pixelMap)
|
Image(this.mCircleBorderPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.width(200)
|
||||||
.width(100)
|
.height(200)
|
||||||
.height(100)
|
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -207,9 +209,8 @@ struct TransformPixelMapPage {
|
||||||
this.transformRotate(mRotate);
|
this.transformRotate(mRotate);
|
||||||
});
|
});
|
||||||
Image(this.mRotatePixelMap.pixelMap)
|
Image(this.mRotatePixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.width(200)
|
||||||
.width(100)
|
.height(200)
|
||||||
.height(100)
|
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -227,8 +228,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mSquarePixelMap.pixelMap)
|
Image(this.mSquarePixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -294,8 +295,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mGrayscalePixelMap.pixelMap)
|
Image(this.mGrayscalePixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -312,8 +313,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mBrightnessPixelMap.pixelMap)
|
Image(this.mBrightnessPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -330,8 +331,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mContrastPixelMap.pixelMap)
|
Image(this.mContrastPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -348,8 +349,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mInvertPixelMap.pixelMap)
|
Image(this.mInvertPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -367,8 +368,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mSepiaPixelMap.pixelMap)
|
Image(this.mSepiaPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -385,8 +386,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mSketchPixelMap.pixelMap)
|
Image(this.mSketchPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -404,8 +405,8 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mBlurPixelMap.pixelMap)
|
Image(this.mBlurPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -424,8 +425,46 @@ struct TransformPixelMapPage {
|
||||||
});
|
});
|
||||||
Image(this.mPixelPixelMap.pixelMap)
|
Image(this.mPixelPixelMap.pixelMap)
|
||||||
.objectFit(ImageFit.Fill)
|
.objectFit(ImageFit.Fill)
|
||||||
.width(100)
|
.width(200)
|
||||||
.height(100)
|
.height(200)
|
||||||
|
.margin({ top: 10 })
|
||||||
|
|
||||||
|
}.margin({ top: 10 });
|
||||||
|
|
||||||
|
Column() {
|
||||||
|
Text("SwirlFilterTransformation").fontColor(Color.Gray).fontSize(16);
|
||||||
|
Button() {
|
||||||
|
Text("图片Swirl").fontSize(13).fontColor(Color.White)
|
||||||
|
}
|
||||||
|
.height(35)
|
||||||
|
.width(120)
|
||||||
|
.margin({ top: 10 })
|
||||||
|
.onClick(() => {
|
||||||
|
this.swirlHandlePixelMap();
|
||||||
|
});
|
||||||
|
Image(this.mSwirlPixelMap.pixelMap)
|
||||||
|
.objectFit(ImageFit.Fill)
|
||||||
|
.width(200)
|
||||||
|
.height(200)
|
||||||
|
.margin({ top: 10 })
|
||||||
|
|
||||||
|
}.margin({ top: 10 });
|
||||||
|
|
||||||
|
Column() {
|
||||||
|
Text("MaskTransformation").fontColor(Color.Gray).fontSize(16);
|
||||||
|
Button() {
|
||||||
|
Text("图片mask").fontSize(13).fontColor(Color.White)
|
||||||
|
}
|
||||||
|
.height(35)
|
||||||
|
.width(120)
|
||||||
|
.margin({ top: 10 })
|
||||||
|
.onClick(() => {
|
||||||
|
this.maskHandlePixelMap($r('app.media.mask_starfish'));
|
||||||
|
});
|
||||||
|
Image(this.mMaskPixelMap.pixelMap)
|
||||||
|
.objectFit(ImageFit.Fill)
|
||||||
|
.width(200)
|
||||||
|
.height(200)
|
||||||
.margin({ top: 10 })
|
.margin({ top: 10 })
|
||||||
|
|
||||||
}.margin({ top: 10 });
|
}.margin({ top: 10 });
|
||||||
|
@ -549,7 +588,7 @@ struct TransformPixelMapPage {
|
||||||
this.mCirclePixelMap = result;
|
this.mCirclePixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(new CropCircleTransformation())
|
.transform(new CropCircleTransformation())
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -571,7 +610,7 @@ struct TransformPixelMapPage {
|
||||||
this.mCircleBorderPixelMap = result;
|
this.mCircleBorderPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(circleTransformation)
|
.transform(circleTransformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -592,7 +631,7 @@ struct TransformPixelMapPage {
|
||||||
this.mRotatePixelMap = result;
|
this.mRotatePixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -613,7 +652,7 @@ struct TransformPixelMapPage {
|
||||||
this.mSquarePixelMap = result;
|
this.mSquarePixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -664,7 +703,7 @@ struct TransformPixelMapPage {
|
||||||
this.mGrayscalePixelMap = result;
|
this.mGrayscalePixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -686,7 +725,7 @@ struct TransformPixelMapPage {
|
||||||
this.mBrightnessPixelMap = result;
|
this.mBrightnessPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -708,7 +747,7 @@ struct TransformPixelMapPage {
|
||||||
this.mContrastPixelMap = result;
|
this.mContrastPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -730,7 +769,7 @@ struct TransformPixelMapPage {
|
||||||
this.mInvertPixelMap = result;
|
this.mInvertPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -752,7 +791,7 @@ struct TransformPixelMapPage {
|
||||||
this.mSepiaPixelMap = result;
|
this.mSepiaPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -774,7 +813,7 @@ struct TransformPixelMapPage {
|
||||||
this.mSketchPixelMap = result;
|
this.mSketchPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -796,7 +835,7 @@ struct TransformPixelMapPage {
|
||||||
this.mBlurPixelMap = result;
|
this.mBlurPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
@ -817,7 +856,50 @@ struct TransformPixelMapPage {
|
||||||
this.mPixelPixelMap = result;
|
this.mPixelPixelMap = result;
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
.setImageViewSize({ width: vp2px(100), height: vp2px(100) })
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
|
.skipMemoryCache(true)
|
||||||
|
.transform(transformation)
|
||||||
|
// .diskCacheStrategy(new NONE())
|
||||||
|
Glide.call(glideOption);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*扭曲
|
||||||
|
*/
|
||||||
|
swirlHandlePixelMap() {
|
||||||
|
let glideOption = new RequestOption();
|
||||||
|
var transformation = new SwirlFilterTransformation(80);
|
||||||
|
// glideOption.load($r('app.media.photo6'))
|
||||||
|
glideOption.load(mUrl)
|
||||||
|
.addListener((err, data) => {
|
||||||
|
let result = new PixelMapPack();
|
||||||
|
result.pixelMap = data.glideValue as PixelMap;
|
||||||
|
this.mSwirlPixelMap = result;
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
|
.skipMemoryCache(true)
|
||||||
|
.transform(transformation)
|
||||||
|
// .diskCacheStrategy(new NONE())
|
||||||
|
Glide.call(glideOption);
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*遮罩
|
||||||
|
*/
|
||||||
|
maskHandlePixelMap(maskResource: Resource) {
|
||||||
|
let glideOption = new RequestOption();
|
||||||
|
var transformation = new MaskTransformation(maskResource);
|
||||||
|
// glideOption.load($r('app.media.photo6'))
|
||||||
|
glideOption.load(mUrl)
|
||||||
|
.addListener((err, data) => {
|
||||||
|
let result = new PixelMapPack();
|
||||||
|
result.pixelMap = data.glideValue as PixelMap;
|
||||||
|
this.mMaskPixelMap = result;
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
.setImageViewSize({ width: vp2px(200), height: vp2px(200) })
|
||||||
.skipMemoryCache(true)
|
.skipMemoryCache(true)
|
||||||
.transform(transformation)
|
.transform(transformation)
|
||||||
// .diskCacheStrategy(new NONE())
|
// .diskCacheStrategy(new NONE())
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 7.6 KiB |
Loading…
Reference in New Issue