我正在撰寫一個代碼,用于獲取影像并使用我選擇的 8 種選定顏色對其進行量化。我希望程式做的是找到與我在陣列中選擇的 8 種顏色之一最接近的顏色,并用我在陣列中的顏色替換該像素。問題是我目前有灰度量化影像,但我很難讓它顯示顏色。我嘗試過的是,我使用距離函式來獲取影像上的顏色到影像像素的距離。有了這個,我的代碼似乎仍然不起作用。我也嘗試用函式替換 RGBA 值,但這也不起作用。如果有任何建議可以解決我的問題,請給我一個答案!
這是我的代碼:
for(let x = 0; x < image.width; x ){
for(let y = 0; y < image.height; y ){
let i = y * image.width x;
let i_r = i*4 0;
let i_g = i*4 1;
let i_b = i*4 2;
let L = 0.2126*rgba[i_r] 0.7152*rgba[i_g] 0.0722*rgba[i_b];
let palette = [ [240, 242,254], [179, 168, 164], [121,192, 246], [103,185,183], [255,201,157], [215,134,94], [67,38,158], [165,104,57]];
let qL = (L/255) * (palette.length - 1);
qL = Math.round(qL);
qL = qL/(palette.length - 1) * 255;
rgba[i_r] = qL;
rgba[i_g] = qL;
rgba[i_b] = qL;
}
}
uj5u.com熱心網友回復:
這可能是您問題的解決方案:
for(let x = 0; x < image.width; x ){
for(let y = 0; y < image.height; y ){
let i = y * image.width x;
let i_r = i*4 0;
let i_g = i*4 1;
let i_b = i*4 2;
let L = 0.2126*rgba[i_r] 0.7152*rgba[i_g] 0.0722*rgba[i_b];
// this line should be improved
let qL = (L/255) * (palette.length - 1);
qL = Math.round(qL);
// fix - remove this line
// qL = qL/(palette.length - 1) * 255;
// fix
rgba[i_r] = palette[qL][0];
rgba[i_g] = palette[qL][1];
rgba[i_b] = palette[qL][2];
}
}
請看一看

graph.add(function(x) { return Math.round(8*x/255.0); });
如您所見,第一部分(映射到 0 的值)在 x 軸上只有 16 個值,下一個有 32 個......最后一個也有 16 個值,它映射到值 8 - 所以猜測應用程式會在這里失敗(因為調色板的最大索引應該是 7)。也許你想改進這一點。
你可能需要類似的東西(注意 x - 16 in eq)

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322250.html
標籤:javascript html 节点.js 图片 量化
