PixelMap
是一个类,它封装了位图数据的操作,包括读取、修改和写回像素数据,利用该类我们就能实现对位图的常规操作。
先了解几个概念:
PixelMap
是一个类,它封装了位图数据的操作,包括读取、修改和写回像素数据。ArrayBuffer
是一种存储原始二进制数据的容器,通常用于存储图像的像素数据。getDensity
,getPixelBytesNumber
, 和getBytesNumberPerRow
是PixelMap
提供的方法,分别用来获取位图的像素密度、总字节数和每行的字节数。
// 假设我们已经有了一个 PixelMap 对象
// 从PixelMap位图对象中获取信息
let pixelBytesNumber = pixelMap.getPixelBytesNumber();
let rowCount = pixelMap.getBytesNumberPerRow();
let density = pixelMap.getDensity();
// 场景一:将读取的整张图像像素数据结果写入ArrayBuffer中
const readWholeImageBuffer = new ArrayBuffer(pixelBytesNumber);
pixelMap.readPixelsToBuffer(readWholeImageBuffer).then(() => {
console.info('Succeeded in reading whole image pixel data.');
}).catch(error => {
console.error('Failed to read whole image pixel data. And the error is: ' + error);
});
// 场景二:读取指定区域内的图片数据,结果写入area.pixels中
const area = {
pixels: new ArrayBuffer(8), // 假设每个像素4字节,这里读取2x1像素区域
offset: 0,
stride: 8, // 每次读取8字节
region: {
size: {
height: 1,
width: 2
},
x: 100, // 假设从 (100, 150) 开始
y: 150
}
};
pixelMap.readPixels(area).then(() => {
console.info('Succeeded in reading the image data in the specified area.');
// 对于读取的图片数据,可以独立使用(创建新的pixelMap),也可以对area.pixels进行所需修改
// 修改 area.pixels 中的数据
const uint8View = new Uint8Array(area.pixels);
for (let i = 0; i < uint8View.length; i++) {
// 假设我们只是简单地将每个像素值加1
uint8View[i] += 1;
}
// 将图片数据 area.pixels 写入指定区域内
pixelMap.writePixels(area).then(() => {
console.info('Succeeded to write pixelMap into the specified area.');
}).catch(error => {
console.error('Failed to write pixelMap into the specified area. And the error is: ' + error);
});
}).catch(error => {
console.error('Failed to read the image data in the specified area. And the error is: ' + error);
});
// 将图片数据结果写入pixelMap中
const writeColor = new ArrayBuffer(96); // 假设要写入的区域是3x4像素
pixelMap.writeBufferToPixels(writeColor, () => {
console.info('Succeeded to write buffer to pixels.');
});