mirror of
https://github.com/dschmenk/PLASMA.git
synced 2026-04-20 01:16:36 +00:00
Undo weighted distance. Do ame thing with gamut
This commit is contained in:
@@ -60,7 +60,6 @@ const RAW_INFILE = $04 // Raw 560x192 24BPP RGB values
|
||||
const MATCH_PREV = $00 // Match previous RGB
|
||||
const MATCH_NEXT = $08 // Match next pixel
|
||||
const MATCH_CYCLE = $10 // Match current cycle
|
||||
const WEIGHT_DIST = $20 // Weighted distance
|
||||
var sin90[] // first 90 degrees of sin in fixed s.15 format
|
||||
var = 0, 571, 1143, 1714, 2285, 2855, 3425, 3993
|
||||
var = 4560, 5126, 5690, 6252, 6812, 7371, 7927, 8480
|
||||
@@ -100,7 +99,7 @@ word = $02D0,$06D0,$0AD0,$0ED0,$12D0,$16D0,$1AD0,$1ED0
|
||||
word = $0350,$0750,$0B50,$0F50,$1350,$1750,$1B50,$1F50
|
||||
word = $03D0,$07D0,$0BD0,$0FD0,$13D0,$17D0,$1BD0,$1FD0
|
||||
var surfMem, surfSpan
|
||||
var rgbMatch, dist
|
||||
var rgbMatch
|
||||
var[12] ntscChroma
|
||||
var[12] ntscCycle
|
||||
var[16] pixRed, pixGrn, pixBlu
|
||||
@@ -146,7 +145,7 @@ def cos(deg)#1
|
||||
return sin(deg + 90)
|
||||
end
|
||||
|
||||
def ldist(dr, dg, db)#2 // Linear distance
|
||||
def dist(dr, dg, db)#2 // Linear distance
|
||||
res[t_i32] rr, gg
|
||||
|
||||
loadi16(dr)
|
||||
@@ -163,26 +162,6 @@ def ldist(dr, dg, db)#2 // Linear distance
|
||||
return rr:[0], rr:[1]
|
||||
end
|
||||
|
||||
def wdist(dr, dg, db)#2 // Linear distance
|
||||
res[t_i32] rr, gg
|
||||
|
||||
loadi16(dr)
|
||||
muli16(dr)
|
||||
muli16(3)
|
||||
store32(@rr)
|
||||
loadi16(dg)
|
||||
muli16(dg)
|
||||
muli16(4)
|
||||
store32(@gg)
|
||||
loadi16(db)
|
||||
muli16(db)
|
||||
muli16(2)
|
||||
add32(@gg)
|
||||
add32(@rr)
|
||||
store32(@rr)
|
||||
return rr:[0], rr:[1]
|
||||
end
|
||||
|
||||
def atoi(strptr)#1
|
||||
var num, len, sign
|
||||
|
||||
@@ -275,8 +254,8 @@ def rgbMatchCycle(r, g, b, errptr, cx)#1
|
||||
cg = pg + ntscChroma[i+GRN]
|
||||
cb = pb + ntscChroma[i+BLU]
|
||||
// Match next chroma subcycle
|
||||
pd:[0], pd:[1] = dist(r - pr, g - pg, b - pb)#2
|
||||
dist(r - cr, g - cg, b - cb)#2
|
||||
pd:[0], pd:[1] = dist(r - pr, g - pg, b - pb)
|
||||
dist(r - cr, g - cg, b - cb)
|
||||
if islt32(@pd)
|
||||
// RGB better matched with next chroma color
|
||||
er = r - cr
|
||||
@@ -338,7 +317,7 @@ def rgbMatchNext(r, g, b, errptr, cx)#1
|
||||
// Match next full chroma cycle (pixel)
|
||||
cd:[0], cd:[1] = $FFFF, $7FFF
|
||||
for i = 0 to 15
|
||||
nd:[0], nd:[1] = dist(r - pixRed[i], g - pixGrn[i], b - pixBlu[i])#2
|
||||
nd:[0], nd:[1] = dist(r - pixRed[i], g - pixGrn[i], b - pixBlu[i])
|
||||
if islt32(@cd)
|
||||
cd:[0], cd:[1] = nd:[0], nd:[1]
|
||||
match = i
|
||||
@@ -384,8 +363,8 @@ def rgbMatchPrev(r, g, b, errptr, cx)#1
|
||||
cg = prevGrn + ntscChroma[i+GRN]
|
||||
cb = prevBlu + ntscChroma[i+BLU]
|
||||
// Match next chroma subcycle
|
||||
pd:[0], pd:[1] = dist(r - prevRed, g - prevGrn, b - prevBlu)#2
|
||||
dist(r - cr, g - cg, b - cb)#2
|
||||
pd:[0], pd:[1] = dist(r - prevRed, g - prevGrn, b - prevBlu)
|
||||
dist(r - cr, g - cg, b - cb)
|
||||
if islt32(@pd)
|
||||
// RGB better matched with next chroma color
|
||||
prevRed = cr
|
||||
@@ -544,7 +523,6 @@ def rgbInit#0
|
||||
else // MATCH_PREV
|
||||
rgbMatch = @rgbMatchPrev
|
||||
fin
|
||||
dist = flags & WEIGHT_DIST ?? @wdist :: @ldist
|
||||
if flags & MEM_MODE
|
||||
surfMem, surfSpan = dhgrAllocBl7Mem(SCR_WIDTH, SCR_HEIGHT)
|
||||
dhgrSurfMem(OP_XOR, SCR_HEIGHT, surfMem, surfSpan)
|
||||
@@ -820,9 +798,6 @@ if ^arg
|
||||
is 'V' // No video output, memory mode only (for portable VM)
|
||||
flags = flags | MEM_MODE
|
||||
break
|
||||
is 'W' // Weighted distance calc
|
||||
flags = flags | WEIGHT_DIST
|
||||
break
|
||||
otherwise
|
||||
puts("? option:"); putc(^(arg + 2)); putln
|
||||
wend
|
||||
@@ -850,6 +825,5 @@ puts(" [-T#] = Tint: -360..360 (in degrees)\n")
|
||||
puts(" [-U<R,G,B>#] = gammUt: Red, Grn, Blu\n")
|
||||
puts(" -255..255\n")
|
||||
puts(" [-V] = no Video output, mem only\n")
|
||||
puts(" [-W] = Weighted distance\n")
|
||||
puts(" IMAGEFILE [DHGRFILE]\n")
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user