Color quantization: Difference between revisions

Shorter second D entry
(Improved names in second D entry)
(Shorter second D entry)
Line 288:
import std.exception: enforce;
import std.array: empty;
import std.typetuple: TypeTuple;
 
enum ON_INHEAP = 1;
Line 612 ⟶ 613:
assert(npx != null);
auto pix = im.pix.ptr;
alias triple = TypeTuple!(0, 1, 2);
 
for (auto px = npx, i = 0u; i < im.h; i++) {
for (uint j = 0; j < im.w; j++, pix += 3, px += 3) {
px[0]/*static*/ =foreach cast(int)pix[0]immutable * CTOTALk; triple)
px[1k] = cast(int)pix[1k] * CTOTAL;
px[2] = cast(int)pix[2] * CTOTAL;
}
}
Line 630 ⟶ 631:
for (auto px = npx, i = 0u; i < im.h; i++) {
for (uint j = 0; j < im.w; j++, pix += 3, px += 3) {
px[0] /=*static*/ CTOTALforeach (immutable k; triple)
px[1k] /= CTOTAL;
px[2] /=*static*/ CTOTALforeach (immutable k; triple)
clamp(px[0k]);
clamp(px[1]);
clamp(px[2]);
 
const nd = nearestColor(px);
Line 648 ⟶ 647:
 
if (j < im.w - 1) {
npx[pos/*static*/ foreach (i,immutable jk; + 1triple) + 0] += v[0] * C10;
npx[pos(i, j + 1) + 1k] += v[1k] * C10;
npx[pos(i, j + 1) + 2] += v[2] * C10;
}
 
Line 656 ⟶ 654:
continue;
 
npx[pos/*static*/ foreach (iimmutable +k; 1, jtriple) + 0] += v[0] * C01;
npx[pos(i + 1, j) + 1k] += v[1k] * C01;
npx[pos(i + 1, j) + 2] += v[2] * C01;
 
if (j < im.w - 1) {
npx[pos(i/*static*/ +foreach 1,(immutable jk; + 1triple) + 0] += v[0] * C11;
npx[pos(i + 1, j + 1) + 1k] += v[1k] * C11;
npx[pos(i + 1, j + 1) + 2] += v[2] * C11;
}
 
if (j) {
npx[pos(i/*static*/ +foreach 1,(immutable jk; - 1triple) + 0] += v[0] * C00;
npx[pos(i + 1, j - 1) + 1k] += v[1k] * C00;
npx[pos(i + 1, j - 1) + 2] += v[2] * C00;
}
}