diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-07-10 20:41:34 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-07-10 21:15:51 -0700 |
commit | eb6cee60221e86119b696db5156457b2b49297ec (patch) | |
tree | 55511fabd6eeacda961ccc19c65639a9e50e30b3 | |
parent | e1dc0e82503701148948faf2a949a1921cbb532a (diff) | |
download | mu-eb6cee60221e86119b696db5156457b2b49297ec.tar.gz |
.
-rw-r--r-- | img.mu | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/img.mu b/img.mu index 3d8d1113..f9f2d6e9 100644 --- a/img.mu +++ b/img.mu @@ -109,7 +109,7 @@ fn render-image screen: (addr screen), _img: (addr image), xmin: int, ymin: int, break-if-!= var img2-storage: image var img2/edi: (addr image) <- address img2-storage - dither-pgm-with-monochrome img, img2 + dither-pgm-unordered-monochrome img, img2 render-pbm-image screen, img2, xmin, ymin, width, height return } @@ -360,7 +360,7 @@ fn nearest-grey level-255: byte -> _/eax: int { return result } -fn dither-pgm-with-monochrome _src: (addr image), _dest: (addr image) { +fn dither-pgm-unordered-monochrome _src: (addr image), _dest: (addr image) { var src/esi: (addr image) <- copy _src var dest/edi: (addr image) <- copy _dest # copy 'width' @@ -391,10 +391,10 @@ fn dither-pgm-with-monochrome _src: (addr image), _dest: (addr image) { var src-data-ah/eax: (addr handle array byte) <- get src, data var _src-data/eax: (addr array byte) <- lookup *src-data-ah var src-data/esi: (addr array byte) <- copy _src-data - _unordered-monochrome-dither src-data, src-width, src-height, buffer, dest-data + _dither-pgm-unordered-monochrome src-data, src-width, src-height, buffer, dest-data } -fn _unordered-monochrome-dither src: (addr array byte), width: int, height: int, buf: (addr array int), dest: (addr array byte) { +fn _dither-pgm-unordered-monochrome src: (addr array byte), width: int, height: int, buf: (addr array int), dest: (addr array byte) { var y/edx: int <- copy 0 { compare y, height @@ -405,9 +405,9 @@ fn _unordered-monochrome-dither src: (addr array byte), width: int, height: int, compare x, width break-if->= #? psd "x", x, 3/fg, x, y - var error/ebx: int <- _read-buffer buf, x, y, width - $_unordered-monochrome-dither:update-error: { - var curr/eax: byte <- _read-byte-buffer src, x, y, width + var error/ebx: int <- _read-pgm-buffer buf, x, y, width + $_dither-pgm-unordered-monochrome:update-error: { + var curr/eax: byte <- _read-pgm-byte-buffer src, x, y, width var curr-int/eax: int <- copy curr curr-int <- shift-left 0x10 # we have 32 bits; we'll use 16 bits for the fraction and leave 8 for unanticipated overflow error <- add curr-int @@ -416,14 +416,14 @@ fn _unordered-monochrome-dither src: (addr array byte), width: int, height: int, { break-if->= #? psd "p", 0, 0x14/fg, x, y - _write-byte-buffer dest, x, y, width, 0/black - break $_unordered-monochrome-dither:update-error + _write-pgm-byte-buffer dest, x, y, width, 0/black + break $_dither-pgm-unordered-monochrome:update-error } #? psd "p", 1, 0xf/fg, x, y - _write-byte-buffer dest, x, y, width, 1/white + _write-pgm-byte-buffer dest, x, y, width, 1/white error <- subtract 0xff0000 } - _diffuse-monochrome-dithering-errors buf, x, y, width, height, error + _diffuse-dithering-error-floyd-steinberg buf, x, y, width, height, error x <- increment loop } @@ -440,7 +440,7 @@ fn _unordered-monochrome-dither src: (addr array byte), width: int, height: int, # # Error is currently a fixed-point number with 16-bit fraction. But # interestingly this function doesn't care about that. -fn _diffuse-monochrome-dithering-errors buf: (addr array int), x: int, y: int, width: int, height: int, error: int { +fn _diffuse-dithering-error-floyd-steinberg buf: (addr array int), x: int, y: int, width: int, height: int, error: int { { compare error, 0 break-if-!= @@ -466,7 +466,7 @@ fn _diffuse-monochrome-dithering-errors buf: (addr array int), x: int, y: int, w tmp <- multiply delta var xright/edx: int <- copy x xright <- increment - _accumulate-error buf, xright, y, width, tmp + _accumulate-pgm-error buf, xright, y, width, tmp } var y/ebx: int <- copy y { @@ -484,30 +484,30 @@ fn _diffuse-monochrome-dithering-errors buf: (addr array int), x: int, y: int, w tmp <- multiply delta var xleft/edx: int <- copy x xleft <- decrement - _accumulate-error buf, xleft, ybelow, width, tmp + _accumulate-pgm-error buf, xleft, ybelow, width, tmp } { var tmp/eax: int <- copy 5 tmp <- multiply delta - _accumulate-error buf, x, ybelow, width, tmp + _accumulate-pgm-error buf, x, ybelow, width, tmp } { compare x, width-1 break-if->= var xright/edx: int <- copy x xright <- increment - _accumulate-error buf, xright, ybelow, width, delta + _accumulate-pgm-error buf, xright, ybelow, width, delta } #? show-errors buf, width, height, x, y } -fn _accumulate-error buf: (addr array int), x: int, y: int, width: int, error: int { - var curr/ebx: int <- _read-buffer buf, x, y, width +fn _accumulate-pgm-error buf: (addr array int), x: int, y: int, width: int, error: int { + var curr/ebx: int <- _read-pgm-buffer buf, x, y, width curr <- add error - _write-buffer buf, x, y, width, curr + _write-pgm-buffer buf, x, y, width, curr } -fn _read-buffer _buf: (addr array int), x: int, y: int, width: int -> _/ebx: int { +fn _read-pgm-buffer _buf: (addr array int), x: int, y: int, width: int -> _/ebx: int { var buf/esi: (addr array int) <- copy _buf var idx/ecx: int <- copy y idx <- multiply width @@ -517,7 +517,7 @@ fn _read-buffer _buf: (addr array int), x: int, y: int, width: int -> _/ebx: int return *result-a } -fn _write-buffer _buf: (addr array int), x: int, y: int, width: int, val: int { +fn _write-pgm-buffer _buf: (addr array int), x: int, y: int, width: int, val: int { var buf/esi: (addr array int) <- copy _buf var idx/ecx: int <- copy y idx <- multiply width @@ -529,7 +529,7 @@ fn _write-buffer _buf: (addr array int), x: int, y: int, width: int, val: int { copy-to *dest-a, src } -fn _read-byte-buffer _buf: (addr array byte), x: int, y: int, width: int -> _/eax: byte { +fn _read-pgm-byte-buffer _buf: (addr array byte), x: int, y: int, width: int -> _/eax: byte { var buf/esi: (addr array byte) <- copy _buf var idx/ecx: int <- copy y idx <- multiply width @@ -539,7 +539,7 @@ fn _read-byte-buffer _buf: (addr array byte), x: int, y: int, width: int -> _/ea return result } -fn _write-byte-buffer _buf: (addr array byte), x: int, y: int, width: int, val: byte { +fn _write-pgm-byte-buffer _buf: (addr array byte), x: int, y: int, width: int, val: byte { var buf/esi: (addr array byte) <- copy _buf var idx/ecx: int <- copy y idx <- multiply width @@ -568,7 +568,7 @@ fn show-errors buf: (addr array int), width: int, height: int, x: int, y: int { { compare x, width break-if->= - var error/ebx: int <- _read-buffer buf, x, y, width + var error/ebx: int <- _read-pgm-buffer buf, x, y, width psd "e", error, 5/fg, x, y x <- increment loop |