mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-11-23 04:33:18 +00:00
HGR using palette
This commit is contained in:
parent
39bcd0f8d7
commit
263b687559
@ -1,5 +1,7 @@
|
||||
package com.bytezone.diskbrowser.applefile;
|
||||
|
||||
import static com.bytezone.diskbrowser.applefile.HiResImage.palette;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.DataBuffer;
|
||||
|
||||
@ -7,187 +9,6 @@ import com.bytezone.diskbrowser.utilities.HexFormatter;
|
||||
|
||||
public class DoubleHiResImage extends HiResImage
|
||||
{
|
||||
// private static final int MAGENTA = 0xFF00FF;
|
||||
// private static final int BROWN = 0x994C00;
|
||||
// private static final int ORANGE = 0xFF9933;
|
||||
// private static final int DARK_GREEN = 0x006600;
|
||||
// private static final int GRAY = 0xA0A0A0;
|
||||
// private static final int GREEN = 0x00CC00;
|
||||
// private static final int YELLOW = 0xFFFF33;
|
||||
// private static final int DARK_BLUE = 0x0066CC;
|
||||
// private static final int PURPLE = 0xCC00CC;
|
||||
// private static final int PINK = 0xFFCCE5;
|
||||
// private static final int MEDIUM_BLUE = 0x3399FF;
|
||||
// private static final int LIGHT_BLUE = 0x99CCFF;
|
||||
// private static final int AQUA = 0x99FFFF;
|
||||
|
||||
// private static final int MAGENTA = 0xDD0033;
|
||||
// private static final int BROWN = 0x885500;
|
||||
// private static final int ORANGE = 0xFF6600;
|
||||
// private static final int DARK_GREEN = 0x007722;
|
||||
// private static final int GRAY1 = 0x555555;
|
||||
// private static final int GREEN = 0x11DD00;
|
||||
// private static final int YELLOW = 0xFFFF00;
|
||||
// private static final int DARK_BLUE = 0x000099;
|
||||
// private static final int PURPLE = 0xDD22DD;
|
||||
// private static final int GRAY2 = 0xAAAAAA;
|
||||
// private static final int PINK = 0xFF9988;
|
||||
// private static final int MEDIUM_BLUE = 0x2222FF;
|
||||
// private static final int LIGHT_BLUE = 0x66AAFF;
|
||||
// private static final int AQUA = 0x44FF99;
|
||||
|
||||
// private static final int MAGENTA = 0x722640;
|
||||
// private static final int DARK_BLUE = 0x40337F;
|
||||
// private static final int PURPLE = 0xE434FE;
|
||||
// private static final int DARK_GREEN = 0x0E5940;
|
||||
// private static final int GRAY = 0x808080;
|
||||
// private static final int MEDIUM_BLUE = 0x1B9AEF;
|
||||
// private static final int LIGHT_BLUE = 0xBFB3FF;
|
||||
// private static final int BROWN = 0x404C00;
|
||||
// private static final int ORANGE = 0xE46501;
|
||||
// private static final int PINK = 0xF1A6BF;
|
||||
// private static final int GREEN = 0x1BCB01;
|
||||
// private static final int YELLOW = 0xBFCC80;
|
||||
// private static final int AQUA = 0x8DD9BF;
|
||||
|
||||
private static int[][] //
|
||||
palette = {
|
||||
// my preferences
|
||||
{ 0x000000, // 0 black A
|
||||
0xFF0000, // 1 red C
|
||||
0xA52A2A, // 2 brown E (8)
|
||||
0xFFA500, // 3 orange G (9)
|
||||
0x008000, // 4 dark green I
|
||||
0x808080, // 5 grey1 K
|
||||
0x90EE90, // 6 light green M (C)
|
||||
0xFFFF00, // 7 yellow O (D)
|
||||
0x00008B, // 8 dark blue B (2)
|
||||
0x800080, // 9 purple D (3)
|
||||
0xC0C0C0, // A grey2 F
|
||||
0xFFC0CB, // B pink H
|
||||
0x00BFFF, // C med blue J (6)
|
||||
0x87CEFA, // D light blue L (7)
|
||||
0x00FFFF, // E aqua N
|
||||
0xFFFFFF // F white P
|
||||
},
|
||||
// Virtual II
|
||||
{ 0x000000, // 0 black
|
||||
0xDD0033, // 1 magenta
|
||||
0x885500, // 2 brown (8)
|
||||
0xFF6600, // 3 orange (9)
|
||||
0x007722, // 4 dark green
|
||||
0x555555, // 5 grey1
|
||||
0x11DD00, // 6 light green (C)
|
||||
0xFFFF00, // 7 yellow (D)
|
||||
0x000099, // 8 dark blue (2)
|
||||
0xDD22DD, // 9 purple (3)
|
||||
0xAAAAAA, // A grey2
|
||||
0xFF9988, // B pink
|
||||
0x2222FF, // C med blue (6)
|
||||
0x66AAFF, // D light blue (7)
|
||||
0x44FF99, // E aqua
|
||||
0xFFFFFF // F white
|
||||
},
|
||||
// Bill Buckels
|
||||
{ 0x000000, // 0 black
|
||||
0x9D0966, // 1 red
|
||||
0x555500, // 2 brown
|
||||
0xF25E00, // 3 orange
|
||||
0x00761A, // 4 dk green
|
||||
0x808080, // 5 gray
|
||||
0x38CB00, // 6 lt green
|
||||
0xD5D51A, // 7 yellow
|
||||
0x2A2AE5, // 8 dk blue
|
||||
0xC734FF, // 9 purple
|
||||
0xC0C0C0, // A grey
|
||||
0xFF89E5, // B pink
|
||||
0x0DA1FF, // C med blue
|
||||
0xAAAAFF, // D lt blue
|
||||
0x62F699, // E aqua
|
||||
0xFFFFFF // F white
|
||||
},
|
||||
// no idea - green beagle
|
||||
{ 0x000000, // 0 black
|
||||
0x722640, // 1 magenta
|
||||
0x404C00, // 2 dark green
|
||||
0xE46501, // 3 orange
|
||||
0x0E5940, // 4 dark green
|
||||
0x808080, // 5 grey
|
||||
0x1B9AEF, // 6 blue
|
||||
0xBFB3FF, // 7 lilac
|
||||
0x40337F, // 8 dark purple
|
||||
0xE434FE, // 9 mauve
|
||||
0x808080, // A dark grey
|
||||
0xF1A6BF, // B pink
|
||||
0x1BCB01, // C bright green
|
||||
0xBFCC80, // D light green
|
||||
0x8DD9BF, // E green
|
||||
0xFFFFFF // F white
|
||||
},
|
||||
// Authentic (MP)
|
||||
{ 0x000000, // black
|
||||
0xD00030, // magenta
|
||||
0x805000, // brown
|
||||
0xF06000, // orange
|
||||
0x007020, // dark green
|
||||
0x505050, // grey1
|
||||
0x10D000, // light green
|
||||
0xF0F000, // yellow
|
||||
0x000090, // dark blue
|
||||
0xD020D0, // purple
|
||||
0xA0A0A0, // grey2
|
||||
0xF09080, // pink
|
||||
0x2020F0, // med blue
|
||||
0x60A0F0, // light blue
|
||||
0x44FF99, // aqua
|
||||
0xFFFFFF // white
|
||||
},
|
||||
// NTSC Corrected (MP)
|
||||
{ 0x000000, // black
|
||||
0x901740, // magenta
|
||||
0x405400, // brown
|
||||
0xD06A1A, // orange
|
||||
0x006940, // dark green
|
||||
0x808080, // grey1
|
||||
0x2FBC1A, // light green
|
||||
0xBFD35A, // yellow
|
||||
0x402CA5, // dark blue
|
||||
0xD043E5, // purple
|
||||
0x808080, // grey2
|
||||
0xFF96BF, // pink
|
||||
0x2F95E5, // med blue
|
||||
0xBFABFF, // light blue
|
||||
0x6FE8BF, // aqua
|
||||
0xFFFFFF // white
|
||||
}, };
|
||||
|
||||
/*-
|
||||
* Michael Pohoreski - The Apple II Forever Anthology
|
||||
|
||||
@reference: Technote tn-iigs-063 “Master Color Values”
|
||||
Color Register Values
|
||||
Color Reg LR HR DHR Master Authentic Tweaked NTSC
|
||||
Name # # # Value Corrected
|
||||
-----------------------------------------------------------------------------
|
||||
Black 0 0 0,4 0 $0000 (00,00,00) (00,00,00) 00,00,00
|
||||
(Magenta) Deep Red 1 1 1 $0D03 (D0,00,30) (D0,00,30) 90,17,40
|
||||
Dark Blue 2 2 8 $0009 (00,00,90) (00,00,80) 40,2C,A5
|
||||
(Violet) Purple 3 3 2 9 $0D2D (D0,20,D0) (FF,00,FF) D0,43,E5
|
||||
Dark Green 4 4 4 $0072 (00,70,20) (00,80,00) 00,69,40
|
||||
(Gray 1) Dark Gray 5 5 5 $0555 (50,50,50) (80,80,80) 80,80,80
|
||||
(Blue) Medium Blue 6 6 6 C $022F (20,20,F0) (00,00,FF) 2F,95,E5
|
||||
(Cyan) Light Blue 7 7 D $06AF (60,A0,F0) (60,A0,FF) BF,AB,FF
|
||||
Brown 8 8 2 $0850 (80,50,00) (80,50,00) 40,54,00
|
||||
Orange 9 9 5 3 $0F60 (F0,60,00) (FF,80,00) D0,6A,1A
|
||||
(Gray 2) Light Gray A A A $0AAA (A0,A0,A0) (C0,C0,C0) 80,80,80
|
||||
Pink B B B $0F98 (F0,90,80) (FF,90,80) FF,96,BF
|
||||
(Green) Light Green C C 1 6 $01D0 (10,D0,00) (00,FF,00) 2F,BC,1A
|
||||
Yellow D D 7 $0FF0 (F0,F0,00) (FF,FF,00) BF,D3,5A
|
||||
(Aqua) Aquamarine E E E $04F9 (40,F0,90) (40,FF,90) 6F,E8,BF
|
||||
White F F 3,7 F $0FFF (F0,F0,F0) (FF,FF,FF) FF,FF,FF
|
||||
Legend:
|
||||
LR: Lo-Res HR: Hi-Res DHR: Double Hi-Res
|
||||
*/
|
||||
|
||||
private final byte[] auxBuffer;
|
||||
private DoubleScrunch doubleScrunch;
|
||||
@ -313,28 +134,4 @@ public class DoubleHiResImage extends HiResImage
|
||||
|
||||
return text.toString ();
|
||||
}
|
||||
|
||||
private void switchColours ()
|
||||
{
|
||||
for (int i = 0; i < palette.length; i++)
|
||||
{
|
||||
for (int c = 2; c <= 6; c += 4)
|
||||
{
|
||||
int temp = palette[i][c];
|
||||
palette[i][c] = palette[i][c + 6];
|
||||
palette[i][c + 6] = temp;
|
||||
|
||||
temp = palette[i][c + 1];
|
||||
palette[i][c + 1] = palette[i][c + 7];
|
||||
palette[i][c + 7] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int rgb (int red, int green, int blue)
|
||||
{
|
||||
System.out.printf ("%3d %3d %3d = 0x%06X%n", red, green, blue,
|
||||
(red << 16 | green << 8 | blue));
|
||||
return red << 16 | green << 8 | blue;
|
||||
}
|
||||
}
|
@ -12,6 +12,162 @@ import com.bytezone.diskbrowser.utilities.HexFormatter;
|
||||
|
||||
public abstract class HiResImage extends AbstractFile
|
||||
{
|
||||
protected static int[][] //
|
||||
palette = {
|
||||
// my preferences
|
||||
{ 0x000000, // 0 black A
|
||||
0xFF0000, // 1 red C
|
||||
0xA52A2A, // 2 brown E (8)
|
||||
0xFFA500, // 3 orange G (9)
|
||||
0x008000, // 4 dark green I
|
||||
0x808080, // 5 grey1 K
|
||||
0x90EE90, // 6 light green M (C)
|
||||
0xFFFF00, // 7 yellow O (D)
|
||||
0x00008B, // 8 dark blue B (2)
|
||||
0x800080, // 9 purple D (3)
|
||||
0xC0C0C0, // A grey2 F
|
||||
0xFFC0CB, // B pink H
|
||||
0x00BFFF, // C med blue J (6)
|
||||
0x87CEFA, // D light blue L (7)
|
||||
0x00FFFF, // E aqua N
|
||||
0xFFFFFF // F white P
|
||||
},
|
||||
// Virtual II
|
||||
{ 0x000000, // 0 black
|
||||
0xDD0033, // 1 magenta
|
||||
0x885500, // 2 brown (8)
|
||||
0xFF6600, // 3 orange (9)
|
||||
0x007722, // 4 dark green
|
||||
0x555555, // 5 grey1
|
||||
0x11DD00, // 6 light green (C)
|
||||
0xFFFF00, // 7 yellow (D)
|
||||
0x000099, // 8 dark blue (2)
|
||||
0xDD22DD, // 9 purple (3)
|
||||
0xAAAAAA, // A grey2
|
||||
0xFF9988, // B pink
|
||||
0x2222FF, // C med blue (6)
|
||||
0x66AAFF, // D light blue (7)
|
||||
0x44FF99, // E aqua
|
||||
0xFFFFFF // F white
|
||||
},
|
||||
// Bill Buckels
|
||||
{ 0x000000, // 0 black
|
||||
0x9D0966, // 1 red
|
||||
0x555500, // 2 brown
|
||||
0xF25E00, // 3 orange
|
||||
0x00761A, // 4 dk green
|
||||
0x808080, // 5 gray
|
||||
0x38CB00, // 6 lt green
|
||||
0xD5D51A, // 7 yellow
|
||||
0x2A2AE5, // 8 dk blue
|
||||
0xC734FF, // 9 purple
|
||||
0xC0C0C0, // A grey
|
||||
0xFF89E5, // B pink
|
||||
0x0DA1FF, // C med blue
|
||||
0xAAAAFF, // D lt blue
|
||||
0x62F699, // E aqua
|
||||
0xFFFFFF // F white
|
||||
},
|
||||
// Kegs (BB)
|
||||
{ rgb (0, 0, 0), // black */
|
||||
rgb (221, 0, 51), // red */
|
||||
rgb (136, 85, 34), // brown */
|
||||
rgb (255, 102, 0), // orange */
|
||||
rgb (0, 119, 0), // dk green */
|
||||
rgb (85, 85, 85), // gray */
|
||||
rgb (0, 221, 0), // lt green */
|
||||
rgb (255, 255, 0), // yellow */
|
||||
rgb (0, 0, 153), // dk blue */
|
||||
rgb (221, 0, 221), // purple */
|
||||
rgb (170, 170, 170), // grey */
|
||||
rgb (255, 153, 136), // pink */
|
||||
rgb (34, 34, 255), // med blue */
|
||||
rgb (102, 170, 255), // lt blue */
|
||||
rgb (0, 255, 153), // aqua */
|
||||
rgb (255, 255, 255) // white
|
||||
},
|
||||
// Authentic (MP)
|
||||
{ 0x000000, // black
|
||||
0xD00030, // magenta
|
||||
0x805000, // brown
|
||||
0xF06000, // orange
|
||||
0x007020, // dark green
|
||||
0x505050, // grey1
|
||||
0x10D000, // light green
|
||||
0xF0F000, // yellow
|
||||
0x000090, // dark blue
|
||||
0xD020D0, // purple
|
||||
0xA0A0A0, // grey2
|
||||
0xF09080, // pink
|
||||
0x2020F0, // med blue
|
||||
0x60A0F0, // light blue
|
||||
0x40F090, // aqua
|
||||
0xFFFFFF // white
|
||||
},
|
||||
// Tweaked (MP)
|
||||
{ 0x000000, // black
|
||||
0xD00030, // magenta
|
||||
0x805000, // brown
|
||||
0xFF8000, // orange
|
||||
0x008000, // dark green
|
||||
0x808080, // grey1
|
||||
0x00FF00, // light green
|
||||
0xFFFF00, // yellow
|
||||
0x000080, // dark blue
|
||||
0xFF00FF, // purple
|
||||
0xC0C0C0, // grey2
|
||||
0xFF9080, // pink
|
||||
0x0000FF, // med blue
|
||||
0x60A0FF, // light blue
|
||||
0x40FF90, // aqua
|
||||
0xFFFFFF // white
|
||||
},
|
||||
// NTSC Corrected (MP)
|
||||
{ 0x000000, // black
|
||||
0x901740, // magenta
|
||||
0x405400, // brown
|
||||
0xD06A1A, // orange
|
||||
0x006940, // dark green
|
||||
0x808080, // grey1
|
||||
0x2FBC1A, // light green
|
||||
0xBFD35A, // yellow
|
||||
0x402CA5, // dark blue
|
||||
0xD043E5, // purple
|
||||
0x808080, // grey2
|
||||
0xFF96BF, // pink
|
||||
0x2F95E5, // med blue
|
||||
0xBFABFF, // light blue
|
||||
0x6FE8BF, // aqua
|
||||
0xFFFFFF // white
|
||||
}, };
|
||||
|
||||
/*-
|
||||
* Michael Pohoreski - The Apple II Forever Anthology
|
||||
|
||||
@reference: Technote tn-iigs-063 “Master Color Values”
|
||||
Color Register Values
|
||||
Color Reg LR HR DHR Master Authentic Tweaked NTSC
|
||||
Name # # # Value Corrected
|
||||
-----------------------------------------------------------------------------
|
||||
Black 0 0 0,4 0 $0000 (00,00,00) (00,00,00) 00,00,00
|
||||
(Magenta) Deep Red 1 1 1 $0D03 (D0,00,30) (D0,00,30) 90,17,40
|
||||
Dark Blue 2 2 8 $0009 (00,00,90) (00,00,80) 40,2C,A5
|
||||
(Violet) Purple 3 3 2 9 $0D2D (D0,20,D0) (FF,00,FF) D0,43,E5
|
||||
Dark Green 4 4 4 $0072 (00,70,20) (00,80,00) 00,69,40
|
||||
(Gray 1) Dark Gray 5 5 5 $0555 (50,50,50) (80,80,80) 80,80,80
|
||||
(Blue) Medium Blue 6 6 6 C $022F (20,20,F0) (00,00,FF) 2F,95,E5
|
||||
(Cyan) Light Blue 7 7 D $06AF (60,A0,F0) (60,A0,FF) BF,AB,FF
|
||||
Brown 8 8 2 $0850 (80,50,00) (80,50,00) 40,54,00
|
||||
Orange 9 9 5 3 $0F60 (F0,60,00) (FF,80,00) D0,6A,1A
|
||||
(Gray 2) Light Gray A A A $0AAA (A0,A0,A0) (C0,C0,C0) 80,80,80
|
||||
Pink B B B $0F98 (F0,90,80) (FF,90,80) FF,96,BF
|
||||
(Green) Light Green C C 1 6 $01D0 (10,D0,00) (00,FF,00) 2F,BC,1A
|
||||
Yellow D D 7 $0FF0 (F0,F0,00) (FF,FF,00) BF,D3,5A
|
||||
(Aqua) Aquamarine E E E $04F9 (40,F0,90) (40,FF,90) 6F,E8,BF
|
||||
White F F 3,7 F $0FFF (F0,F0,F0) (FF,FF,FF) FF,FF,FF
|
||||
Legend:
|
||||
LR: Lo-Res HR: Hi-Res DHR: Double Hi-Res
|
||||
*/
|
||||
private static final byte[] pngHeader =
|
||||
{ (byte) 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };
|
||||
|
||||
@ -320,4 +476,25 @@ public abstract class HiResImage extends AbstractFile
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// switch between lo-res and DHR indexing
|
||||
private void switchColours ()
|
||||
{
|
||||
int[] tbl = { 2, 3, 6, 7 };
|
||||
for (int i = 0; i < palette.length; i++)
|
||||
for (int j = 0; j < tbl.length; j++)
|
||||
{
|
||||
int c = tbl[j];
|
||||
int temp = palette[i][c];
|
||||
palette[i][c] = palette[i][c + 6];
|
||||
palette[i][c + 6] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
private static int rgb (int red, int green, int blue)
|
||||
{
|
||||
System.out.printf ("%3d %3d %3d = 0x%06X%n", red, green, blue,
|
||||
(red << 16 | green << 8 | blue));
|
||||
return red << 16 | green << 8 | blue;
|
||||
}
|
||||
}
|
@ -7,11 +7,12 @@ public class OriginalHiResImage extends HiResImage
|
||||
{
|
||||
private static final int WHITE = 0xFFFFFF;
|
||||
private static final int BLACK = 0x000000;
|
||||
private static final int RED = 0xFF0000;
|
||||
private static final int GREEN = 0x00CC00;
|
||||
private static final int BLUE = 0x0000FF;
|
||||
private static final int VIOLET = 0xBB66FF;
|
||||
private static final int[][] palette = { { VIOLET, GREEN }, { BLUE, RED } };
|
||||
// private static final int RED = 0xFF0000;
|
||||
// private static final int GREEN = 0x00CC00;
|
||||
// private static final int BLUE = 0x0000FF;
|
||||
// private static final int VIOLET = 0xBB66FF;
|
||||
// private static final int[][] palette = { { VIOLET, GREEN }, { BLUE, RED } };
|
||||
private static final int[][] paletteTable = { { 9, 6 }, { 12, 3 } };
|
||||
|
||||
private static boolean matchColourBits = false;
|
||||
|
||||
@ -88,6 +89,8 @@ public class OriginalHiResImage extends HiResImage
|
||||
|
||||
private void fillLine (int base)
|
||||
{
|
||||
int paletteNdx = paletteIndex % palette.length;
|
||||
|
||||
int max = Math.min (base + 40, buffer.length);
|
||||
int linePtr = 0;
|
||||
assert colourBits != null;
|
||||
@ -103,7 +106,8 @@ public class OriginalHiResImage extends HiResImage
|
||||
int val = (value >> px) & 0x01; // get the next pixel to draw
|
||||
int column = (ptr + px) % 2; // is it in an odd or even column?
|
||||
line[linePtr++] = val == 0 ? 0 : // black pixel
|
||||
palette[colourBit][column]; // coloured pixel - use lookup table
|
||||
// palette[colourBit][column]; // coloured pixel - use lookup table
|
||||
palette[paletteNdx][paletteTable[colourBit][column]]; // coloured pixel - use lookup table
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user