From: Maarten ter Huurne [mth@stack.nl]
Sent: donderdag, december 17, 1998 22:19
To: Hans Otten
Subject: Re: gfx quickbasic programma

At 11:02 AM 12/6/98 +0100, you wrote:

>Uit de MSX Mailinglist begrijp ik dat je code hebt om een screen 12
>conversie te kunnen doen.

Klopt. Onderstaand QuickBASIC programma zet een RAW file (256x212, 24 bits,
BGR volgorde) om in een SCC file (SCREEN 12 BLOAD).

De formules komen van Hans Schoormans. Als je ze in je eigen programma gaat
gebruiken dan stelt hij het vast op prijs als je zijn naam ergens vermeldt.

Bye,
		Maarten

=======================================================================

OPEN "in.raw" FOR BINARY LOCK READ AS #1
OPEN "out.scc" FOR OUTPUT AS #2
PRINT #2, CHR$(&HFE); MKI$(&H0); MKI$(&HD3FF); MKI$(&H0);

DIM L AS LONG
DIM R1 AS INTEGER, G1 AS INTEGER, B1 AS INTEGER
DIM R2 AS INTEGER, G2 AS INTEGER, B2 AS INTEGER
DIM R3 AS INTEGER, G3 AS INTEGER, B3 AS INTEGER
DIM R4 AS INTEGER, G4 AS INTEGER, B4 AS INTEGER
DIM RS AS INTEGER, GS AS INTEGER, BS AS INTEGER
DIM Y1 AS INTEGER, Y2 AS INTEGER, Y3 AS INTEGER, Y4 AS INTEGER
DIM J AS INTEGER, K AS INTEGER

L = LOF(1)
DO WHILE L > 0
        B1 = ASC(INPUT$(1, #1)) / 8
        G1 = ASC(INPUT$(1, #1)) / 8
        R1 = ASC(INPUT$(1, #1)) / 8
        B2 = ASC(INPUT$(1, #1)) / 8
        G2 = ASC(INPUT$(1, #1)) / 8
        R2 = ASC(INPUT$(1, #1)) / 8
        B3 = ASC(INPUT$(1, #1)) / 8
        G3 = ASC(INPUT$(1, #1)) / 8
        R3 = ASC(INPUT$(1, #1)) / 8
        B4 = ASC(INPUT$(1, #1)) / 8
        G4 = ASC(INPUT$(1, #1)) / 8
        R4 = ASC(INPUT$(1, #1)) / 8
      
        RS = R1 + R2 + R3 + R4
        GS = G1 + G2 + G3 + G4
        BS = B1 + B2 + B3 + B4

        J = (6 * RS - GS - 4 * BS) / 32
        IF J < -32 THEN J = -32 ELSE IF J > 31 THEN J = 31
        K = (-2 * RS + 7 * GS - 4 * BS) / 32
        IF K < -32 THEN K = -32 ELSE IF K > 31 THEN K = 31

        Y1 = (-6 * J - 11 * K + 16 * R1 + 16 * G1 + 20 * B1) / 57
        IF Y1 < 0 THEN Y1 = 0 ELSE IF Y1 > 31 THEN Y1 = 31
        Y2 = (-6 * J - 11 * K + 16 * R2 + 16 * G2 + 20 * B2) / 57
        IF Y2 < 0 THEN Y2 = 0 ELSE IF Y2 > 31 THEN Y2 = 31
        Y3 = (-6 * J - 11 * K + 16 * R3 + 16 * G3 + 20 * B3) / 57
        IF Y3 < 0 THEN Y3 = 0 ELSE IF Y3 > 31 THEN Y3 = 31
        Y4 = (-6 * J - 11 * K + 16 * R4 + 16 * G4 + 20 * B4) / 57
        IF Y4 < 0 THEN Y4 = 0 ELSE IF Y4 > 31 THEN Y4 = 31

        IF J < 0 THEN J = J + 64
        IF K < 0 THEN K = K + 64

        PRINT #2, CHR$((Y1 * 8) + (K AND 7));
        PRINT #2, CHR$((Y2 * 8) + (K \ 8));
        PRINT #2, CHR$((Y3 * 8) + (J AND 7));
        PRINT #2, CHR$((Y4 * 8) + (J \ 8));

        L = L - 12
LOOP

CLOSE #1, #2

