首页 > 应用开发 > IT综合 > 基于ArkUI开发框架,图片马赛克处理的实现
原文: https://mp.weixin.qq.com/s/60HDKcBFV7GTjZpzeHtjeg,点击链接查看更多技术内容。
关于马赛克
import image from "@ohos.multimedia.image"
let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber());await bitmap.readPixelsToBuffer(bufferData);
for (let index = 0; index < dataArray.length; index += 4) {const r = dataArray[index];const g = dataArray[index+1];const b = dataArray[index+2];const a = dataArray[index+3];}//横排的正方形个数var x_index = Math.floor(targetWidth / realPixel_W);//纵排的正方形个数var y_index = Math.floor(targetHeight / realPixel_H);
for (let ch = 0; ch < y_index; ch++) {for (let cw = 0; cw < x_index; cw++) {let max_x = (cw + 1) * realPixel_W > targetWidth ? targetWidth : (cw + 1) * realPixel_W;let max_y = (ch + 1) * realPixel_H > targetHeight ? targetHeight : (ch + 1) * realPixel_H;let min_x = cw * realPixel_W;let min_y = ch * realPixel_H;//取左上角的像素值let center_p = inPixels[min_y+1][min_x+1];//设置该正方形里的像素统一for (let zh = min_y; zh < max_y; zh++) {for (let zw = min_x; zw < max_x; zw++) {inPixels[zh][zw] = center_p;}}}}writeBufferToPixels(src: ArrayBuffer): Promise<void>
Image(this._mCropPixelMap.pixelMap).width(300).height(300).margin(10).objectFit(ImageFit.Contain).onTouch(event => {let array: TouchObject[] = event.changedTouches;for (let i = 0;i < array.length; i++) {//触摸的x y坐标let centX = array[i].x;let centY = array[i].y;}});//获取到左上角的坐标let offMinX = Math.floor(centerX - pixel / 2);let offMinY = Math.floor(centerY - pixel / 2);//右下角的坐标let offMaxX = Math.floor(centerX + pixel / 2);let offMaxY = Math.floor(centerY + pixel / 2);offMinX = offMinX < 0 ? 0 : offMinX;offMinY = offMinY < 0 ? 0 : offMinY;offMaxX = offMaxX > targetWidth ? targetWidth : offMaxX;offMaxY = offMaxY > targetHeight ? targetHeight : offMaxY;
//取左上角的像素值let center_p = PixelExampleUtils.inPixels[offMaxY+1][offMaxX+1];//设置该正方形里的像素统一for (let zh = offMinY; zh < offMaxY; zh++) {for (let zw = offMinX; zw < offMaxX; zw++) {PixelExampleUtils.inPixels[zh][zw] = center_p;changeArray[zh][zw] = center_p;}}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047792/viewspace-2898265/ ,如需转载,请注明出处,否则将追究法律责任。