mirror of https://github.com/trudnai/Steve2.git
Better Color Management
This commit is contained in:
parent
82100c6bc3
commit
223e2eb9e6
|
@ -343,9 +343,8 @@ class HiRes: NSView {
|
||||||
case 1: // purple (bits are in reverse!)
|
case 1: // purple (bits are in reverse!)
|
||||||
pixelsSRGB[colorAddr] = color_purple
|
pixelsSRGB[colorAddr] = color_purple
|
||||||
pixelsSRGB[colorAddr + 1] = color_purple
|
pixelsSRGB[colorAddr + 1] = color_purple
|
||||||
// HiRes.pixelsSRGB[colorAddr + 1] = color_purple
|
pixelsSRGB[colorAddr + 2] = color_purple
|
||||||
if (colorAddr >= 2) && (prev != 0x03) && (prev != 0x07) && (prev != 0x00) && (prev != 0x04) {
|
if (colorAddr >= 2) && (prev != 0x03) && (prev != 0x07) && (prev != 0x00) && (prev != 0x04) {
|
||||||
pixelsSRGB[colorAddr] = color_purple
|
|
||||||
pixelsSRGB[colorAddr - 1] = color_purple
|
pixelsSRGB[colorAddr - 1] = color_purple
|
||||||
pixelsSRGB[colorAddr - 2] = color_purple
|
pixelsSRGB[colorAddr - 2] = color_purple
|
||||||
}
|
}
|
||||||
|
@ -353,58 +352,68 @@ class HiRes: NSView {
|
||||||
case 2: // green
|
case 2: // green
|
||||||
// reducing color bleeding
|
// reducing color bleeding
|
||||||
if (colorAddr > 1) && (pixelsSRGB[colorAddr - 2] != color_black) {
|
if (colorAddr > 1) && (pixelsSRGB[colorAddr - 2] != color_black) {
|
||||||
pixelsSRGB[colorAddr] = color_green
|
pixelsSRGB[colorAddr + 0] = color_green
|
||||||
pixelsSRGB[colorAddr + 1] = color_green
|
|
||||||
}
|
}
|
||||||
|
pixelsSRGB[colorAddr] = color_green
|
||||||
|
pixelsSRGB[colorAddr + 1] = color_green
|
||||||
pixelsSRGB[colorAddr + 2] = color_green
|
pixelsSRGB[colorAddr + 2] = color_green
|
||||||
pixelsSRGB[colorAddr + 3] = color_green
|
pixelsSRGB[colorAddr + 3] = color_green
|
||||||
|
|
||||||
case 3: // white 1
|
case 3: // white 1
|
||||||
// if ( colorAddr >= 2 ) && ( HiRes.pixelsSRGB[colorAddr - 2] != color_black ) {
|
// if ( colorAddr >= 2 ) && ( pixelsSRGB[colorAddr - 2] != color_black ) {
|
||||||
// HiRes.pixelsSRGB[colorAddr - 1] = HiRes.pixelsSRGB[colorAddr - 2]
|
// pixelsSRGB[colorAddr - 2] = color_white // HiRes.pixelsSRGB[colorAddr - 2]
|
||||||
// }
|
// }
|
||||||
// if (colorAddr >= 1) {
|
// if (colorAddr >= 1) {
|
||||||
// HiRes.pixelsSRGB[colorAddr - 1] = color_yellow
|
// HiRes.pixelsSRGB[colorAddr - 1] = color_yellow
|
||||||
// }
|
// }
|
||||||
pixelsSRGB[colorAddr] = color_white
|
pixelsSRGB[colorAddr - 1] = color_white
|
||||||
|
pixelsSRGB[colorAddr + 0] = color_white
|
||||||
pixelsSRGB[colorAddr + 1] = color_white
|
pixelsSRGB[colorAddr + 1] = color_white
|
||||||
pixelsSRGB[colorAddr + 2] = color_white
|
pixelsSRGB[colorAddr + 2] = color_white
|
||||||
pixelsSRGB[colorAddr + 3] = color_white
|
pixelsSRGB[colorAddr + 3] = color_white
|
||||||
|
pixelsSRGB[colorAddr + 4] = color_white
|
||||||
|
|
||||||
case 5: // blue
|
case 5: // blue
|
||||||
pixelsSRGB[colorAddr + 1] = color_blue
|
pixelsSRGB[colorAddr + 1] = color_blue
|
||||||
pixelsSRGB[colorAddr + 2] = color_blue
|
pixelsSRGB[colorAddr + 2] = color_blue
|
||||||
|
pixelsSRGB[colorAddr] = color_blue
|
||||||
|
pixelsSRGB[colorAddr - 1] = color_blue
|
||||||
if (colorAddr >= 2) && (prev != 0x00) && (prev != 0x04) {
|
if (colorAddr >= 2) && (prev != 0x00) && (prev != 0x04) {
|
||||||
pixelsSRGB[colorAddr] = color_blue
|
|
||||||
pixelsSRGB[colorAddr - 1] = color_blue
|
|
||||||
pixelsSRGB[colorAddr - 2] = color_blue
|
pixelsSRGB[colorAddr - 2] = color_blue
|
||||||
}
|
}
|
||||||
|
|
||||||
case 6: // orange
|
case 6: // orange
|
||||||
// reducing color bleeding
|
// reducing color bleeding
|
||||||
if (colorAddr > 0) && (pixelsSRGB[colorAddr] != color_black) {
|
if (colorAddr > 0) && (pixelsSRGB[colorAddr - 2] != color_black) {
|
||||||
|
pixelsSRGB[colorAddr + 0] = color_orange // important for color bleeding and color contiunity
|
||||||
pixelsSRGB[colorAddr + 1] = color_orange
|
pixelsSRGB[colorAddr + 1] = color_orange
|
||||||
pixelsSRGB[colorAddr + 2] = color_orange
|
|
||||||
}
|
}
|
||||||
|
pixelsSRGB[colorAddr + 2] = color_orange
|
||||||
pixelsSRGB[colorAddr + 3] = color_orange
|
pixelsSRGB[colorAddr + 3] = color_orange
|
||||||
pixelsSRGB[colorAddr + 4] = color_orange
|
pixelsSRGB[colorAddr + 4] = color_orange
|
||||||
|
|
||||||
case 7: // white 2
|
case 7: // white 2
|
||||||
// pixelsSRGB[colorAddr + 0] = color_white // Donkey Kong would be perfect but problem in Sneakers
|
if ( colorAddr >= 2 ) && ( pixelsSRGB[colorAddr - 2] != color_black ) {
|
||||||
|
// pixelsSRGB[colorAddr - 2] = color_white // HiRes.pixelsSRGB[colorAddr - 2]
|
||||||
|
pixelsSRGB[colorAddr - 1] = color_white
|
||||||
|
}
|
||||||
|
pixelsSRGB[colorAddr + 0] = color_white // Donkey Kong would be perfect but problem in Sneakers
|
||||||
pixelsSRGB[colorAddr + 1] = color_white
|
pixelsSRGB[colorAddr + 1] = color_white
|
||||||
pixelsSRGB[colorAddr + 2] = color_white
|
pixelsSRGB[colorAddr + 2] = color_white
|
||||||
pixelsSRGB[colorAddr + 3] = color_white
|
pixelsSRGB[colorAddr + 3] = color_white
|
||||||
pixelsSRGB[colorAddr + 4] = color_white
|
pixelsSRGB[colorAddr + 4] = color_white
|
||||||
|
|
||||||
case 0: // 0x00 (black 1), 0x04 (black 2)
|
case 0: // 0x00 (black 1), 0x04 (black 2)
|
||||||
pixelsSRGB[colorAddr + 0] = color_black
|
// pixelsSRGB[colorAddr + 0] = color_black
|
||||||
pixelsSRGB[colorAddr + 1] = color_black
|
pixelsSRGB[colorAddr + 1] = color_black
|
||||||
pixelsSRGB[colorAddr + 2] = color_black
|
pixelsSRGB[colorAddr + 2] = color_black
|
||||||
pixelsSRGB[colorAddr + 3] = color_black
|
pixelsSRGB[colorAddr + 3] = color_black
|
||||||
|
|
||||||
// white adjustment
|
// white adjustment
|
||||||
|
// if (colorAddr >= 2) && ((prev == 3) || (prev == 7)) {
|
||||||
if (colorAddr >= 2) && (prev == 7) {
|
if (colorAddr >= 2) && (prev == 7) {
|
||||||
pixelsSRGB[colorAddr - 1] = color_black
|
pixelsSRGB[colorAddr - 1] = color_black
|
||||||
|
pixelsSRGB[colorAddr - 0] = color_black
|
||||||
}
|
}
|
||||||
// blue adjustment
|
// blue adjustment
|
||||||
if (colorAddr >= 2) && (prev == 5) {
|
if (colorAddr >= 2) && (prev == 5) {
|
||||||
|
@ -418,6 +427,7 @@ class HiRes: NSView {
|
||||||
pixelsSRGB[colorAddr + 4] = color_black
|
pixelsSRGB[colorAddr + 4] = color_black
|
||||||
|
|
||||||
// white adjustment
|
// white adjustment
|
||||||
|
// if (colorAddr >= 2) && ((prev == 3) || (prev == 7)) {
|
||||||
if (colorAddr >= 2) && (prev == 7) {
|
if (colorAddr >= 2) && (prev == 7) {
|
||||||
pixelsSRGB[colorAddr - 0] = color_black
|
pixelsSRGB[colorAddr - 0] = color_black
|
||||||
}
|
}
|
||||||
|
@ -428,6 +438,43 @@ class HiRes: NSView {
|
||||||
// pixelsSRGB[colorAddr - 2] = color_black // if i put that in there is ladder on Donkey Kong is too thin
|
// pixelsSRGB[colorAddr - 2] = color_black // if i put that in there is ladder on Donkey Kong is too thin
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// let pp = pixelAddr - 1 // HiRes.pixelAddrBlockIncrement
|
||||||
|
// let cp = pixelsSRGB[pp / 4]
|
||||||
|
//
|
||||||
|
// let pa = pixelAddr - HiRes.pixelAddrBlockIncrement * 7 * 20
|
||||||
|
// let ca = pixelsSRGB[pa / 4]
|
||||||
|
//
|
||||||
|
// if cp == ca {
|
||||||
|
// switch cp {
|
||||||
|
// case color_blue, color_white, color_green, color_purple, color_orange, color_yellow:
|
||||||
|
//// pixelsSRGB[pp/4] = color_turquis
|
||||||
|
//// pixelsSRGB[pa/4] = color_yellow
|
||||||
|
//
|
||||||
|
// let c1 = ca & 0x00FFFFFF
|
||||||
|
// let a = ca >> 24
|
||||||
|
// let a1 = (a / 6) << 24
|
||||||
|
// let a2 = a1 * 2
|
||||||
|
// let a3 = a1 * 3
|
||||||
|
// let a4 = a1 * 4
|
||||||
|
//
|
||||||
|
//// pixelsSRGB[colorAddr + 0] = a4 | c1
|
||||||
|
//// pixelsSRGB[colorAddr + 1] = a3 | c1
|
||||||
|
//// pixelsSRGB[colorAddr + 2] = a2 | c1
|
||||||
|
//// pixelsSRGB[colorAddr + 3] = a1 | c1
|
||||||
|
//
|
||||||
|
// pixelsSRGB[colorAddr + 0] = a4 | c1
|
||||||
|
// pixelsSRGB[colorAddr + 1] = a2 | c1
|
||||||
|
//
|
||||||
|
// // let pb = pixelAddr + HiRes.pixelAddrBlockIncrement * 7 * 20
|
||||||
|
// // let cb = pb / 4
|
||||||
|
// // pixelsSRGB[cb] = pixelsSRGB[colorAddr]
|
||||||
|
// default:
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -439,6 +486,7 @@ class HiRes: NSView {
|
||||||
if colorAddr >= 2 {
|
if colorAddr >= 2 {
|
||||||
pixelsSRGB[colorAddr - 1] = color_white
|
pixelsSRGB[colorAddr - 1] = color_white
|
||||||
pixelsSRGB[colorAddr - 2] = color_white
|
pixelsSRGB[colorAddr - 2] = color_white
|
||||||
|
pixelsSRGB[colorAddr - 3] = color_white
|
||||||
}
|
}
|
||||||
// blue expansion
|
// blue expansion
|
||||||
if pixel == 5 {
|
if pixel == 5 {
|
||||||
|
@ -475,18 +523,21 @@ class HiRes: NSView {
|
||||||
|
|
||||||
// blue adjustment -- followed by white
|
// blue adjustment -- followed by white
|
||||||
else if (prev == 0x05) && (
|
else if (prev == 0x05) && (
|
||||||
(pixel == 0x05) ||
|
(pixel == 0x05)
|
||||||
(pixel == 0x03) || (pixel == 0x07) // white
|
|| (pixel == 0x03)
|
||||||
|
|| (pixel == 0x07) // white
|
||||||
) {
|
) {
|
||||||
pixelsSRGB[colorAddr - 0] = color_blue
|
// pixelsSRGB[colorAddr - 0] = color_blue
|
||||||
pixelsSRGB[colorAddr - 1] = color_blue
|
// pixelsSRGB[colorAddr - 1] = color_blue
|
||||||
pixelsSRGB[colorAddr - 2] = color_blue
|
pixelsSRGB[colorAddr - 2] = color_blue // blue color bleed
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static let pixelAddrBlockIncrement = 8 * 2 // 2 display pixels per logical pixel
|
static let logicalPixels = 8
|
||||||
|
static let physicalPixels = 2
|
||||||
|
static let pixelAddrBlockIncrement = logicalPixels * physicalPixels // 2 display pixels per logical pixel
|
||||||
|
|
||||||
func RenderColor() {
|
func RenderColor() {
|
||||||
var height = HiRes.PixelHeight
|
var height = HiRes.PixelHeight
|
||||||
|
@ -601,7 +652,7 @@ class HiRes: NSView {
|
||||||
currentContext?.interpolationQuality = .high // TODO: Make a switch that lets you turn on and off "old monitor effects"
|
currentContext?.interpolationQuality = .high // TODO: Make a switch that lets you turn on and off "old monitor effects"
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
currentContext?.interpolationQuality = .none
|
currentContext?.interpolationQuality = .high // .none
|
||||||
}
|
}
|
||||||
currentContext?.draw(image, in: boundingBox)
|
currentContext?.draw(image, in: boundingBox)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue