File size: 1,662 Bytes
1e8da4e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import { BasePostProcess } from './base.js';
/**
* 色を反転させるポストプロセス
*/
export class InvertPostProcess extends BasePostProcess {
constructor() {
super();
this.name = 'invert';
this.label = '色反転';
this.ui = {
template: `
<p class="text-muted mb-0"><small>設定はありません</small></p>
`
};
}
/**
* 色を反転させる処理を適用
* @param {HTMLCanvasElement} canvas - 処理対象のcanvas
* @returns {HTMLCanvasElement} - 処理後のcanvas
*/
async apply(canvas) {
// 新しいcanvasを作成
const newCanvas = document.createElement('canvas');
newCanvas.width = canvas.width;
newCanvas.height = canvas.height;
const ctx = newCanvas.getContext('2d');
// 元のcanvasを描画
ctx.drawImage(canvas, 0, 0);
// ピクセルデータを取得
const imageData = ctx.getImageData(0, 0, newCanvas.width, newCanvas.height);
const data = imageData.data;
// 各ピクセルの色を反転
for (let i = 0; i < data.length; i += 4) {
// RGB値を反転(アルファ値は変更しない)
data[i] = 255 - data[i]; // R
data[i + 1] = 255 - data[i + 1]; // G
data[i + 2] = 255 - data[i + 2]; // B
// data[i + 3] はアルファ値なので変更しない
}
// 反転した画像データを描画
ctx.putImageData(imageData, 0, 0);
return newCanvas;
}
} |